#include <grp.h>
#include "rfc822.h"
+#include "list.h"
#include "hash.h"
#include "charset.h"
#include "lib/rx.h"
#define INITVAL(x)
#endif
-/* 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? */
-#define CH_UPDATE_IRT (1<<16) /* update In-Reply-To: */
-#define CH_UPDATE_REFS (1<<17) /* update References: */
-
-/* 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 */
-#define M_LASTFOLDER (1<<8) /* last-folder mode - hack hack hack */
-
-/* flags for mutt_get_token() */
+/* flags for mutt_extract_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_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 */
M_LIMIT,
M_EXPIRED,
M_SUPERSEDED,
- M_REALNAME,
/* actions for mutt_pattern_comp/mutt_pattern_exec */
M_AND,
M_REFERENCE,
M_RECIPIENT,
M_LIST,
+ M_SUBSCRIBED_LIST,
M_PERSONAL_RECIP,
M_PERSONAL_FROM,
M_ADDRESS,
M_CRYPT_ENCRYPT,
M_PGP_KEY,
M_XLABEL,
+ M_MIMEATTACH,
#ifdef USE_NNTP
M_NEWSGROUPS,
#endif
+ M_REALNAME,
+ M_MULTIPART,
/* Options for Mailcap lookup */
M_EDIT,
/* quad-option vars */
enum {
OPT_ABORT,
+ OPT_ATTACH,
OPT_BOUNCE,
OPT_COPY,
OPT_DELETE,
OPTCOLLAPSEUNREAD,
OPTCONFIRMAPPEND,
OPTCONFIRMCREATE,
+ OPTCOUNTATTACH,
OPTDELETEUNTAG,
+ OPTDELSP,
OPTDIGESTCOLLAPSE,
OPTDUPTHREADS,
OPTEDITHDRS,
OPTHIDETOPMISSING,
OPTIGNORELISTREPLYTO,
#ifdef USE_IMAP
+ OPTIMAPCHECKSUBSCRIBED,
OPTIMAPLSUB,
OPTIMAPPASSIVE,
OPTIMAPPEEK,
OPTWRAPSEARCH,
OPTWRITEBCC, /* write out a bcc header? */
OPTXMAILER,
+ OPTXMAILTO, /* 1 if $edit_header is forcebly set */
OPTXTERMSETTITLES,
OPTCRYPTUSEGPGME,
#define toggle_option(x) mutt_bit_toggle(Options,x)
#define option(x) mutt_bit_isset(Options,x)
-typedef struct list_t {
- char *data;
- struct list_t *next;
-} LIST;
-
typedef struct spam_list_t {
rx_t *rx;
int nmatch;
} SPAM_LIST;
-#define mutt_new_list() mem_calloc (1, sizeof (LIST))
#define mutt_new_spam_list() mem_calloc (1, sizeof (SPAM_LIST))
-void mutt_free_list (LIST **);
void mutt_free_spam_list (SPAM_LIST **);
-LIST *mutt_copy_list (LIST *);
-int mutt_matches_ignore (const char *, LIST *);
-/* add an element to a list */
-LIST *mutt_add_list (LIST*, const char*);
-LIST *mutt_add_list_n (LIST*, const void*, size_t len);
+int mutt_matches_ignore (const char *, LIST *);
void mutt_init (int, LIST *);
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.
+ LOFF_T 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 */
+ LOFF_T offset; /* offset where the actual data begins */
+ LOFF_T length; /* length (in bytes) of attachment */
char *filename; /* when sending a message, this is the file
* to which this structure refers
*/
struct attachptr *aptr; /* Menu information, used in recvattach.c */
+ signed short attach_count;
+
time_t stamp; /* time stamp of last
* encoding update.
*/
unsigned int badsig:1; /* bad cryptographic signature (needed to check encrypted s/mime-signatures) */
unsigned int collapsed:1; /* used by recvattach */
+ unsigned int attach_qualifies:1;
} BODY;
unsigned int security:11; /* 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 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 searched:1;
unsigned int matched:1;
+ /* tells whether the attach count is valid */
+ unsigned int attach_valid: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? */
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? */
+ LOFF_T 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 */
char *tree; /* character string to print thread tree */
struct thread *thread;
+ short attach_total;
+
#ifdef MIXMASTER
LIST *chain;
#endif
/* flag to mutt_pattern_comp() */
-#define M_FULL_MSG 1 /* enable body and header matching */
+#define M_FULL_MSG (1<<0) /* enable body and header matching */
typedef enum {
M_MATCH_FULL_ADDRESS = 1
typedef struct pattern_t {
short op;
- short not;
- short alladdr;
+ unsigned int not : 1;
+ unsigned int alladdr : 1;
+ unsigned int stringmatch : 1;
int min;
int max;
struct pattern_t *next;
struct pattern_t *child; /* arguments to logical op */
+ char* str;
regex_t *rx;
} pattern_t;
unsigned int counting:1; /* do we just want to cound? */
} CONTEXT;
-typedef struct attachptr {
- BODY *content;
- int parent_type;
- char *tree;
- int level;
- int num;
- unsigned int unowned:1; /* don't unlink on detach */
-} ATTACHPTR;
-
-#include "ascii.h"
-#include "alias.h"
-#include "buffer.h"
-#include "state.h"
-#include "enter.h"
+/* for attachment counter */
+typedef struct {
+ char *major;
+ int major_int;
+ char *minor;
+ regex_t minor_rx;
+} ATTACH_MATCH;
+
+/* Flags for mutt_count_body_parts() */
+#define M_PARTS_TOPLEVEL (1<<0) /* is the top-level part */
+#define M_PARTS_RECOUNT (1<<1) /* force recount */
+
#include "protos.h"
#include "lib.h"
#include "globals.h"