always build imap as well.
[apps/madmutt.git] / mutt.h
diff --git a/mutt.h b/mutt.h
index 226eda0..188205f 100644 (file)
--- a/mutt.h
+++ b/mutt.h
 #include <pwd.h>
 #include <grp.h>
 
-#include "rfc822.h"
-#include "list.h"
-#include "hash.h"
+#include <lib-lib/buffer.h>
+#include <lib-lib/hash.h>
+#include <lib-lib/list.h>
+
+#include <lib-mime/mime.h>
+
 #include "charset.h"
 #include "lib/rx.h"
 
 #define INITVAL(x)
 #endif
 
-/* 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_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 */
-
-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 */
@@ -114,11 +101,9 @@ typedef enum {
 #define M_REPLYHOOK    (1<<10)
 #define M_SEND2HOOK     (1<<11)
 
-#ifdef USE_COMPRESSED
 #define M_OPENHOOK     (1<<12)
 #define M_APPENDHOOK   (1<<13)
 #define M_CLOSEHOOK    (1<<14)
-#endif
 
 /* tree characters for linearize_tree and print_enriched_string */
 #define M_TREE_LLCORNER                1
@@ -167,7 +152,6 @@ enum {
   M_LIMIT,
   M_EXPIRED,
   M_SUPERSEDED,
-  M_REALNAME,
 
   /* actions for mutt_pattern_comp/mutt_pattern_exec */
   M_AND,
@@ -193,6 +177,7 @@ enum {
   M_REFERENCE,
   M_RECIPIENT,
   M_LIST,
+  M_SUBSCRIBED_LIST,
   M_PERSONAL_RECIP,
   M_PERSONAL_FROM,
   M_ADDRESS,
@@ -201,9 +186,12 @@ enum {
   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,
@@ -233,23 +221,20 @@ enum {
 /* quad-option vars */
 enum {
   OPT_ABORT,
+  OPT_ATTACH,
   OPT_BOUNCE,
   OPT_COPY,
   OPT_DELETE,
   OPT_FORWEDIT,
   OPT_INCLUDE,
-#ifdef USE_IMAP
   OPT_IMAPRECONNECT,
-#endif
   OPT_MFUPTO,
   OPT_MIMEFWD,
   OPT_MIMEFWDREST,
   OPT_MOVE,
   OPT_PGPMIMEAUTO,              /* ask to revert to PGP/MIME when inline fails */
-#ifdef USE_POP
   OPT_POPDELETE,
   OPT_POPRECONNECT,
-#endif
   OPT_POSTPONE,
   OPT_PRINT,
   OPT_QUIT,
@@ -314,7 +299,9 @@ enum {
   OPTCOLLAPSEUNREAD,
   OPTCONFIRMAPPEND,
   OPTCONFIRMCREATE,
+  OPTCOUNTATTACH,
   OPTDELETEUNTAG,
+  OPTDELSP,
   OPTDIGESTCOLLAPSE,
   OPTDUPTHREADS,
   OPTEDITHDRS,
@@ -328,7 +315,7 @@ enum {
   OPTFORCENAME,
   OPTFORWDECODE,
   OPTFORWQUOTE,
-#if USE_HCACHE
+#ifdef USE_HCACHE
   OPTHCACHEVERIFY,
 #if HAVE_QDBM
   OPTHCACHECOMPRESS,
@@ -344,13 +331,11 @@ enum {
   OPTHIDETOPLIMITED,
   OPTHIDETOPMISSING,
   OPTIGNORELISTREPLYTO,
-#ifdef USE_IMAP
   OPTIMAPCHECKSUBSCRIBED,
   OPTIMAPLSUB,
   OPTIMAPPASSIVE,
   OPTIMAPPEEK,
   OPTIMAPSERVERNOISE,
-#endif
 #if defined(USE_SSL) || defined(USE_GNUTLS)
 # ifndef USE_GNUTLS
   OPTSSLSYSTEMCERTS,
@@ -381,10 +366,8 @@ enum {
   OPTPAGERSTOP,
   OPTPIPEDECODE,
   OPTPIPESPLIT,
-#ifdef USE_POP
   OPTPOPAUTHTRYALL,
   OPTPOPLAST,
-#endif
   OPTPRINTDECODE,
   OPTPRINTSPLIT,
   OPTPROMPTAFTER,
@@ -433,6 +416,7 @@ enum {
   OPTWRAPSEARCH,
   OPTWRITEBCC,                  /* write out a bcc header? */
   OPTXMAILER,
+  OPTXMAILTO,                   /* 1 if $edit_header is forcebly set */
   OPTXTERMSETTITLES,
 
   OPTCRYPTUSEGPGME,
@@ -534,50 +518,13 @@ typedef struct spam_list_t {
 } SPAM_LIST;
 
 
-#define mutt_new_spam_list() mem_calloc (1, sizeof (SPAM_LIST))
+#define mutt_new_spam_list() p_new(SPAM_LIST, 1)
 void mutt_free_spam_list (SPAM_LIST **);
 
 int mutt_matches_ignore (const char *, LIST *);
 
 void mutt_init (int, LIST *);
 
-typedef struct envelope {
-  ADDRESS *return_path;
-  ADDRESS *from;
-  ADDRESS *to;
-  ADDRESS *cc;
-  ADDRESS *bcc;
-  ADDRESS *sender;
-  ADDRESS *reply_to;
-  ADDRESS *mail_followup_to;
-  char *list_post;              /* this stores a mailto URL, or nothing */
-  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
-  BUFFER *spam;
-  LIST *references;             /* message references (in reverse order) */
-  LIST *in_reply_to;            /* in-reply-to header content */
-  LIST *userhdrs;               /* user defined headers */
-  unsigned int irt_changed:1;   /* In-Reply-To changed to link/break threads */
-  unsigned int refs_changed:1;  /* References changed to break thread */
-} 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 */
@@ -598,13 +545,13 @@ typedef struct body {
   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.
+  off_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 */
+  off_t offset;                 /* offset where the actual data begins */
+  off_t length;                 /* length (in bytes) of attachment */
   char *filename;               /* when sending a message, this is the file
                                  * to which this structure refers
                                  */
@@ -625,6 +572,8 @@ typedef struct body {
 
   struct attachptr *aptr;       /* Menu information, used in recvattach.c */
 
+  signed short attach_count;
+
   time_t stamp;                 /* time stamp of last
                                  * encoding update.
                                  */
@@ -662,6 +611,7 @@ typedef struct body {
   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;
 
@@ -669,7 +619,7 @@ typedef struct header {
   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 */
@@ -701,6 +651,9 @@ typedef struct header {
   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?  */
@@ -712,7 +665,7 @@ typedef struct header {
 
   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? */
+  off_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 */
@@ -728,17 +681,14 @@ typedef struct header {
   char *tree;                   /* character string to print thread tree */
   struct thread *thread;
 
+  short attach_total;
+
 #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;
@@ -762,7 +712,7 @@ typedef struct thread {
 
 
 /* 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
@@ -770,12 +720,14 @@ typedef enum {
 
 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;
 
@@ -805,16 +757,12 @@ typedef struct {
   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 */
 
-#ifdef USE_COMPRESSED
   void *compressinfo;           /* compressed mbox module private data */
   char *realpath;               /* path to compressed mailbox */
-#endif                          /* USE_COMPRESSED */
 
   unsigned int locked:1;        /* is the mailbox locked? */
   unsigned int changed:1;       /* mailbox has been modified */
@@ -827,11 +775,18 @@ typedef struct {
   unsigned int counting:1;      /* do we just want to cound? */
 } CONTEXT;
 
-#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;
+  const 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"