2 * Copyright notice from original mutt:
3 * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>
4 * Copyright (C) 2004 g10 Code GmbH
6 * This file is part of mutt-ng, see http://www.muttng.org/.
7 * It's licensed under the GNU General Public License,
8 * please see the file GPL in the top level source directory.
19 # include <unistd.h> /* needed for SEEK_SET */
22 # include <unix.h> /* needed for snprintf on QNX. */
24 #include <sys/types.h>
33 #if defined(HAVE_WCTYPE_H) && defined(HAVE_WC_FUNCS)
37 #ifndef _POSIX_PATH_MAX
38 #include <posix1_lim.h>
44 #include <lib-lib/buffer.h>
45 #include <lib-lib/hash.h>
46 #include <lib-lib/list.h>
47 #include <lib-lib/rx.h>
49 #include <lib-mime/mime.h>
57 # define MB_LEN_MAX 16
60 # define MUTT_VERSION (VERSION)
62 /* nifty trick I stole from ELM 2.5alpha. */
65 #define INITVAL(x) = x
72 int ch; /* raw key pressed */
73 int op; /* function op */
76 /* flags for _mutt_system() */
77 #define M_DETACH_PROCESS 1 /* detach subprocess from group */
79 /* flags for mutt_FormatString() */
81 M_FORMAT_FORCESUBJ = (1 << 0), /* print the subject even if unchanged */
82 M_FORMAT_TREE = (1 << 1), /* draw the thread tree */
83 M_FORMAT_MAKEPRINT = (1 << 2), /* make sure that all chars are printable */
84 M_FORMAT_OPTIONAL = (1 << 3),
85 M_FORMAT_STAT_FILE = (1 << 4), /* used by mutt_attach_fmt */
86 M_FORMAT_ARROWCURSOR = (1 << 5), /* reserve space for arrow_cursor */
87 M_FORMAT_INDEX = (1 << 6) /* this is a main index entry */
90 /* types for mutt_add_hook() */
91 #define M_FOLDERHOOK 1
92 #define M_MBOXHOOK (1<<1)
93 #define M_SENDHOOK (1<<2)
94 #define M_FCCHOOK (1<<3)
95 #define M_SAVEHOOK (1<<4)
96 #define M_CHARSETHOOK (1<<5)
97 #define M_ICONVHOOK (1<<6)
98 #define M_MESSAGEHOOK (1<<7)
99 #define M_CRYPTHOOK (1<<8)
100 #define M_ACCOUNTHOOK (1<<9)
101 #define M_REPLYHOOK (1<<10)
102 #define M_SEND2HOOK (1<<11)
104 #define M_OPENHOOK (1<<12)
105 #define M_APPENDHOOK (1<<13)
106 #define M_CLOSEHOOK (1<<14)
108 /* tree characters for linearize_tree and print_enriched_string */
109 #define M_TREE_LLCORNER 1
110 #define M_TREE_ULCORNER 2
111 #define M_TREE_LTEE 3
112 #define M_TREE_HLINE 4
113 #define M_TREE_VLINE 5
114 #define M_TREE_SPACE 6
115 #define M_TREE_RARROW 7
116 #define M_TREE_STAR 8
117 #define M_TREE_HIDDEN 9
118 #define M_TREE_EQUALS 10
119 #define M_TREE_TTEE 11
120 #define M_TREE_BTEE 12
121 #define M_TREE_MISSING 13
122 #define M_TREE_MAX 14
124 #define M_THREAD_COLLAPSE (1<<0)
125 #define M_THREAD_UNCOLLAPSE (1<<1)
126 #define M_THREAD_GET_HIDDEN (1<<2)
127 #define M_THREAD_UNREAD (1<<3)
128 #define M_THREAD_NEXT_UNREAD (1<<4)
131 /* modes for mutt_view_attachment() */
136 /* action codes used by mutt_set_flag() and mutt_pattern_function() */
156 /* actions for mutt_pattern_comp/mutt_pattern_exec */
196 /* Options for Mailcap lookup */
202 /* options for socket code */
208 /* Options for mutt_save_attachment */
213 /* possible arguments to set_quadoption() */
221 /* quad-option vars */
235 OPT_PGPMIMEAUTO, /* ask to revert to PGP/MIME when inline fails */
243 #if defined(USE_SSL) || defined(USE_GNUTLS)
247 OPT_VERIFYSIG, /* verify PGP signatures */
253 OPT_FOLLOWUPTOPOSTER,
254 #endif /* USE_NNTP */
256 /* THIS MUST BE THE LAST VALUE. */
260 /* flags to ci_send_message() */
261 #define SENDREPLY (1<<0)
262 #define SENDGROUPREPLY (1<<1)
263 #define SENDLISTREPLY (1<<2)
264 #define SENDFORWARD (1<<3)
265 #define SENDPOSTPONED (1<<4)
266 #define SENDBATCH (1<<5)
267 #define SENDKEY (1<<6)
268 #define SENDRESEND (1<<7)
269 #define SENDNEWS (1<<8)
271 /* flags to _mutt_select_file() */
272 #define M_SEL_BUFFY (1<<0)
273 #define M_SEL_MULTI (1<<1)
274 #define M_SEL_FOLDER (1<<2)
276 /* flags for parse_spam_list */
321 #endif /* HAVE_QDBM */
329 OPTHIDETHREADSUBJECT,
332 OPTIGNORELISTREPLYTO,
333 OPTIMAPCHECKSUBSCRIBED,
338 #if defined(USE_SSL) || defined(USE_GNUTLS)
342 # endif /* !USE_GNUTLS */
346 #endif /* USE_SSL || USE_GNUTLS */
355 OPTMENUSCROLL, /* scroll menu instead of implicit next-page */
357 OPTMETAKEY, /* interpret ALT-x as ESC-x */
362 OPTMIMESUBJECT, /* encode subject line with RFC2047 */
409 #ifdef HAVE_GETADDRINFO
416 OPTWRITEBCC, /* write out a bcc header? */
418 OPTXMAILTO, /* 1 if $edit_header is forcebly set */
429 OPTCRYPTREPLYENCRYPT,
431 OPTCRYPTREPLYSIGNENCRYPTED,
435 OPTSDEFAULTDECRYPTKEY,
458 #endif /* USE_NNTP */
462 OPTAUXSORT, /* (pseudo) using auxillary sort function */
463 OPTFORCEREFRESH, /* (pseudo) refresh even during macros */
464 OPTLOCALES, /* (pseudo) set if user has valid locale definition */
465 OPTNOCURSES, /* (pseudo) when sending in batch mode */
466 OPTNEEDREDRAW, /* (pseudo) to notify caller of a submenu */
467 OPTSEARCHREVERSE, /* (pseudo) used by ci_search_command */
468 OPTMSGERR, /* (pseudo) used by mutt_error/mutt_message */
469 OPTSEARCHINVALID, /* (pseudo) used to invalidate the search pat */
470 OPTSIGNALSBLOCKED, /* (pseudo) using by mutt_block_signals () */
471 OPTSYSSIGNALSBLOCKED, /* (pseudo) using by mutt_block_signals_system () */
472 OPTNEEDRESORT, /* (pseudo) used to force a re-sort */
473 OPTRESORTINIT, /* (pseudo) used to force the next resort to be from scratch */
474 OPTVIEWATTACH, /* (pseudo) signals that we are viewing attachments */
475 OPTFORCEREDRAWINDEX, /* (pseudo) used to force a redraw in the main index */
476 OPTFORCEREDRAWPAGER, /* (pseudo) used to force a redraw in the pager */
477 OPTSORTSUBTHREADS, /* (pseudo) used when $sort_aux changes */
478 OPTNEEDRESCORE, /* (pseudo) set when the `score' command is used */
479 OPTATTACHMSG, /* (pseudo) used by attach-message */
480 OPTHIDEREAD, /* (pseudo) whether or not hide read messages */
481 OPTKEEPQUIET, /* (pseudo) shut up the message and refresh
482 * functions while we are executing an
485 OPTMENUCALLER, /* (pseudo) tell menu to give caller a take */
486 OPTREDRAWTREE, /* (pseudo) redraw the thread tree */
487 OPTPGPCHECKTRUST, /* (pseudo) used by pgp_select_key () */
488 OPTDONTHANDLEPGPKEYS, /* (pseudo) used to extract PGP keys */
489 OPTUNBUFFEREDINPUT, /* (pseudo) don't use key buffer */
492 OPTNEWS, /* (pseudo) used to change reader mode */
493 OPTNEWSSEND, /* (pseudo) used to change behavior when posting */
494 OPTNEWSCACHE, /* (pseudo) used to indicate if news cache exist */
496 OPTSHORTENHIERARCHY, /* set when to shorten "hierarchies" in the sidebar */
497 OPTSIDEBARNEWMAILONLY,
501 #define mutt_bit_alloc(n) calloc ((n + 7) / 8, sizeof (char))
502 #define mutt_bit_set(v,n) v[n/8] |= (1 << (n % 8))
503 #define mutt_bit_unset(v,n) v[n/8] &= ~(1 << (n % 8))
504 #define mutt_bit_toggle(v,n) v[n/8] ^= (1 << (n % 8))
505 #define mutt_bit_isset(v,n) (v[n/8] & (1 << (n % 8)))
507 #define set_option(x) mutt_bit_set(Options,x)
508 #define unset_option(x) mutt_bit_unset(Options,x)
509 #define toggle_option(x) mutt_bit_toggle(Options,x)
510 #define option(x) mutt_bit_isset(Options,x)
512 typedef struct spam_list_t {
516 struct spam_list_t *next;
520 #define mutt_new_spam_list() p_new(SPAM_LIST, 1)
521 void mutt_free_spam_list (SPAM_LIST **);
523 int mutt_matches_ignore (const char *, LIST *);
525 void mutt_init (int, LIST *);
527 typedef struct thread {
528 unsigned int fake_thread:1;
529 unsigned int duplicate_thread:1;
530 unsigned int sort_children:1;
531 unsigned int check_subject:1;
532 unsigned int visible:1;
534 unsigned int subtree_visible:2;
535 unsigned int next_subtree_visible:1;
536 struct thread *parent;
537 struct thread *child;
545 /* flag to mutt_pattern_comp() */
546 #define M_FULL_MSG (1<<0) /* enable body and header matching */
549 M_MATCH_FULL_ADDRESS = 1
552 typedef struct pattern_t {
554 unsigned int not : 1;
555 unsigned int alladdr : 1;
556 unsigned int stringmatch : 1;
559 struct pattern_t *next;
560 struct pattern_t *child; /* arguments to logical op */
569 time_t mtime_cur; /* used with maildir folders */
572 char *pattern; /* limit pattern string */
573 pattern_t *limit_pattern; /* compiled limit pattern */
575 HEADER *last_tag; /* last tagged msg. used to link threads */
576 THREAD *tree; /* top of thread tree */
577 HASH *id_hash; /* hash table by msg id */
578 HASH *subj_hash; /* hash table by subject */
579 HASH *thread_hash; /* hash table for threading */
580 int *v2r; /* mapping from virtual to real msgno */
581 int hdrmax; /* number of pointers in hdrs */
582 int msgcount; /* number of messages in the mailbox */
583 int vcount; /* the number of virtual messages */
584 int tagged; /* how many messages are tagged? */
585 int new; /* how many new messages? */
586 int unread; /* how many unread messages? */
587 int deleted; /* how many deleted messages */
588 int appended; /* how many saved messages? */
589 int flagged; /* how many flagged messages */
590 int msgnotreadyet; /* which msg "new" in pager, -1 if none */
591 void *data; /* driver specific data */
593 short magic; /* mailbox type */
595 void *compressinfo; /* compressed mbox module private data */
596 char *realpath; /* path to compressed mailbox */
598 unsigned int locked:1; /* is the mailbox locked? */
599 unsigned int changed:1; /* mailbox has been modified */
600 unsigned int readonly:1; /* don't allow changes to the mailbox */
601 unsigned int dontwrite:1; /* dont write the mailbox on close */
602 unsigned int append:1; /* mailbox is opened in append mode */
603 unsigned int quiet:1; /* inhibit status messages? */
604 unsigned int collapsed:1; /* are all threads collapsed? */
605 unsigned int closing:1; /* mailbox is being closed */
606 unsigned int counting:1; /* do we just want to cound? */
609 /* for attachment counter */
617 /* Flags for mutt_count_body_parts() */
618 #define M_PARTS_TOPLEVEL (1<<0) /* is the top-level part */
619 #define M_PARTS_RECOUNT (1<<1) /* force recount */
625 #endif /* !_MUTT_H */