move rfc822.c as well
[apps/madmutt.git] / mutt.h
diff --git a/mutt.h b/mutt.h
index d7e80b4..2ef4a1b 100644 (file)
--- a/mutt.h
+++ b/mutt.h
 #include <pwd.h>
 #include <grp.h>
 
-#include "rfc822.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_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() */
-#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 */
@@ -200,7 +154,6 @@ enum {
   M_LIMIT,
   M_EXPIRED,
   M_SUPERSEDED,
-  M_REALNAME,
 
   /* actions for mutt_pattern_comp/mutt_pattern_exec */
   M_AND,
@@ -226,6 +179,7 @@ enum {
   M_REFERENCE,
   M_RECIPIENT,
   M_LIST,
+  M_SUBSCRIBED_LIST,
   M_PERSONAL_RECIP,
   M_PERSONAL_FROM,
   M_ADDRESS,
@@ -234,9 +188,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,
@@ -266,6 +223,7 @@ enum {
 /* quad-option vars */
 enum {
   OPT_ABORT,
+  OPT_ATTACH,
   OPT_BOUNCE,
   OPT_COPY,
   OPT_DELETE,
@@ -342,11 +300,14 @@ enum {
   OPTBEEP,
   OPTBEEPNEW,
   OPTBOUNCEDELIVERED,
+  OPTBRAILLEFRIENDLY,
   OPTCHECKNEW,
   OPTCOLLAPSEUNREAD,
   OPTCONFIRMAPPEND,
   OPTCONFIRMCREATE,
+  OPTCOUNTATTACH,
   OPTDELETEUNTAG,
+  OPTDELSP,
   OPTDIGESTCOLLAPSE,
   OPTDUPTHREADS,
   OPTEDITHDRS,
@@ -360,7 +321,7 @@ enum {
   OPTFORCENAME,
   OPTFORWDECODE,
   OPTFORWQUOTE,
-#if USE_HCACHE
+#ifdef USE_HCACHE
   OPTHCACHEVERIFY,
 #if HAVE_QDBM
   OPTHCACHECOMPRESS,
@@ -377,24 +338,21 @@ enum {
   OPTHIDETOPMISSING,
   OPTIGNORELISTREPLYTO,
 #ifdef USE_IMAP
+  OPTIMAPCHECKSUBSCRIBED,
   OPTIMAPLSUB,
   OPTIMAPPASSIVE,
   OPTIMAPPEEK,
   OPTIMAPSERVERNOISE,
-# if defined(USE_SSL) || defined(USE_GNUTLS)
-  OPTIMAPFORCESSL,
-# endif
 #endif
-#if defined(USE_SSL) || defined(USE_NSS) || defined(USE_GNUTLS)
+#if defined(USE_SSL) || defined(USE_GNUTLS)
 # ifndef USE_GNUTLS
+  OPTSSLSYSTEMCERTS,
   OPTSSLV2,
-# endif
+# endif /* !USE_GNUTLS */
   OPTSSLV3,
   OPTTLSV1,
-# ifndef USE_GNUTLS
-  OPTSSLSYSTEMCERTS,
-# endif
-#endif
+  OPTSSLFORCETLS,
+#endif /* USE_SSL || USE_GNUTLS */
   OPTIMPLICITAUTOVIEW,
   OPTINCLUDEONLYFIRST,
   OPTKEEPFLAGGED,
@@ -441,6 +399,7 @@ enum {
   OPTSORTRE,
   OPTSPAMSEP,
   OPTSTATUSONTOP,
+  OPTSTRICTMAILTO,
   OPTSTRICTMIME,
   OPTSTRICTTHREADS,
   OPTSTRIPWAS,
@@ -467,6 +426,7 @@ enum {
   OPTWRAPSEARCH,
   OPTWRITEBCC,                  /* write out a bcc header? */
   OPTXMAILER,
+  OPTXMAILTO,                   /* 1 if $edit_header is forcebly set */
   OPTXTERMSETTITLES,
 
   OPTCRYPTUSEGPGME,
@@ -560,15 +520,6 @@ enum {
 #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 spam_list_t {
   rx_t *rx;
   int nmatch;
@@ -577,28 +528,13 @@ typedef struct spam_list_t {
 } SPAM_LIST;
 
 
-#define mutt_new_list() safe_calloc (1, sizeof (LIST))
-#define mutt_new_spam_list() safe_calloc (1, sizeof (SPAM_LIST))
-void mutt_free_list (LIST **);
+#define mutt_new_spam_list() p_new(SPAM_LIST, 1)
 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 *);
+int mutt_matches_ignore (const char *, LIST *);
 
 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;
@@ -626,14 +562,10 @@ typedef struct envelope {
   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 */
@@ -654,13 +586,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
                                  */
@@ -681,6 +613,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.
                                  */
@@ -718,6 +652,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;
 
@@ -725,7 +660,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 */
@@ -741,8 +676,6 @@ typedef struct header {
   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 irt_changed:1;   /* In-Reply-To changed to link/break threads */
-  unsigned int refs_changed:1;  /* References changed to break thread */
   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.
@@ -759,6 +692,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?  */
@@ -770,7 +706,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 */
@@ -786,7 +722,7 @@ typedef struct header {
   char *tree;                   /* character string to print thread tree */
   struct thread *thread;
 
-  ENVELOPE *new_env;            /* envelope information for rethreading */
+  short attach_total;
 
 #ifdef MIXMASTER
   LIST *chain;
@@ -822,7 +758,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
@@ -830,12 +766,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;
 
@@ -887,53 +825,18 @@ typedef struct {
   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;
-} ATTACHPTR;
-
+/* for attachment counter */
 typedef struct {
-  FILE *fpin;
-  FILE *fpout;
-  char *prefix;
-  int flags;
-} STATE;
+  char *major;
+  int major_int;
+  const char *minor;
+  regex_t minor_rx;
+} ATTACH_MATCH;
 
-/* used by enter.c */
+/* 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 */
 
-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 M_REPLYING     (1<<6)  /* are we replying? */
-#define M_FIRSTDONE    (1<<7)  /* the first attachment has been done */
-
-#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"