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 */
21 #include <sys/types.h>
30 #if defined(HAVE_WCTYPE_H) && defined(HAVE_WC_FUNCS)
34 #ifndef _POSIX_PATH_MAX
35 #include <posix1_lim.h>
41 #include <lib-lib/buffer.h>
42 #include <lib-lib/hash.h>
43 #include <lib-lib/list.h>
44 #include <lib-lib/rx.h>
46 #include <lib-mime/mime.h>
48 #define MUTT_VERSION (VERSION)
50 /* nifty trick I stole from ELM 2.5alpha. */
53 #define INITVAL(x) = x
60 int ch; /* raw key pressed */
61 int op; /* function op */
64 /* flags for mutt_FormatString() */
66 M_FORMAT_FORCESUBJ = (1 << 0), /* print the subject even if unchanged */
67 M_FORMAT_TREE = (1 << 1), /* draw the thread tree */
68 M_FORMAT_MAKEPRINT = (1 << 2), /* make sure that all chars are printable */
69 M_FORMAT_OPTIONAL = (1 << 3),
70 M_FORMAT_STAT_FILE = (1 << 4), /* used by mutt_attach_fmt */
71 M_FORMAT_ARROWCURSOR = (1 << 5), /* reserve space for arrow_cursor */
72 M_FORMAT_INDEX = (1 << 6) /* this is a main index entry */
75 /* types for mutt_add_hook() */
76 #define M_FOLDERHOOK 1
77 #define M_MBOXHOOK (1<<1)
78 #define M_SENDHOOK (1<<2)
79 #define M_FCCHOOK (1<<3)
80 #define M_SAVEHOOK (1<<4)
81 #define M_CHARSETHOOK (1<<5)
82 #define M_ICONVHOOK (1<<6)
83 #define M_MESSAGEHOOK (1<<7)
84 #define M_CRYPTHOOK (1<<8)
85 #define M_ACCOUNTHOOK (1<<9)
86 #define M_REPLYHOOK (1<<10)
87 #define M_SEND2HOOK (1<<11)
89 #define M_OPENHOOK (1<<12)
90 #define M_APPENDHOOK (1<<13)
91 #define M_CLOSEHOOK (1<<14)
93 /* tree characters for linearize_tree and print_enriched_string */
94 #define M_TREE_LLCORNER 1
95 #define M_TREE_ULCORNER 2
97 #define M_TREE_HLINE 4
98 #define M_TREE_VLINE 5
99 #define M_TREE_SPACE 6
100 #define M_TREE_RARROW 7
101 #define M_TREE_STAR 8
102 #define M_TREE_HIDDEN 9
103 #define M_TREE_EQUALS 10
104 #define M_TREE_TTEE 11
105 #define M_TREE_BTEE 12
106 #define M_TREE_MISSING 13
107 #define M_TREE_MAX 14
109 #define M_THREAD_COLLAPSE (1<<0)
110 #define M_THREAD_UNCOLLAPSE (1<<1)
111 #define M_THREAD_GET_HIDDEN (1<<2)
112 #define M_THREAD_UNREAD (1<<3)
113 #define M_THREAD_NEXT_UNREAD (1<<4)
116 /* modes for mutt_view_attachment() */
121 /* action codes used by mutt_set_flag() and mutt_pattern_function() */
141 /* actions for mutt_pattern_comp/mutt_pattern_exec */
181 /* Options for Mailcap lookup */
187 /* options for socket code */
193 /* Options for mutt_save_attachment */
198 /* possible arguments to set_quadoption() */
206 /* quad-option vars */
220 OPT_PGPMIMEAUTO, /* ask to revert to PGP/MIME when inline fails */
228 #if defined(USE_SSL) || defined(USE_GNUTLS)
232 OPT_VERIFYSIG, /* verify PGP signatures */
238 OPT_FOLLOWUPTOPOSTER,
239 #endif /* USE_NNTP */
241 /* THIS MUST BE THE LAST VALUE. */
245 /* flags to ci_send_message() */
246 #define SENDREPLY (1<<0)
247 #define SENDGROUPREPLY (1<<1)
248 #define SENDLISTREPLY (1<<2)
249 #define SENDFORWARD (1<<3)
250 #define SENDPOSTPONED (1<<4)
251 #define SENDBATCH (1<<5)
252 #define SENDKEY (1<<6)
253 #define SENDRESEND (1<<7)
254 #define SENDNEWS (1<<8)
256 /* flags to _mutt_select_file() */
257 #define M_SEL_BUFFY (1<<0)
258 #define M_SEL_MULTI (1<<1)
259 #define M_SEL_FOLDER (1<<2)
261 /* flags for parse_spam_list */
306 #endif /* HAVE_QDBM */
314 OPTHIDETHREADSUBJECT,
317 OPTIGNORELISTREPLYTO,
318 OPTIMAPCHECKSUBSCRIBED,
323 #if defined(USE_SSL) || defined(USE_GNUTLS)
327 # endif /* !USE_GNUTLS */
331 #endif /* USE_SSL || USE_GNUTLS */
340 OPTMENUSCROLL, /* scroll menu instead of implicit next-page */
342 OPTMETAKEY, /* interpret ALT-x as ESC-x */
347 OPTMIMESUBJECT, /* encode subject line with RFC2047 */
394 #ifdef HAVE_GETADDRINFO
401 OPTWRITEBCC, /* write out a bcc header? */
403 OPTXMAILTO, /* 1 if $edit_header is forcebly set */
414 OPTCRYPTREPLYENCRYPT,
416 OPTCRYPTREPLYSIGNENCRYPTED,
420 OPTSDEFAULTDECRYPTKEY,
443 #endif /* USE_NNTP */
447 OPTAUXSORT, /* (pseudo) using auxillary sort function */
448 OPTFORCEREFRESH, /* (pseudo) refresh even during macros */
449 OPTLOCALES, /* (pseudo) set if user has valid locale definition */
450 OPTNOCURSES, /* (pseudo) when sending in batch mode */
451 OPTNEEDREDRAW, /* (pseudo) to notify caller of a submenu */
452 OPTSEARCHREVERSE, /* (pseudo) used by ci_search_command */
453 OPTMSGERR, /* (pseudo) used by mutt_error/mutt_message */
454 OPTSEARCHINVALID, /* (pseudo) used to invalidate the search pat */
455 OPTSIGNALSBLOCKED, /* (pseudo) using by mutt_block_signals () */
456 OPTSYSSIGNALSBLOCKED, /* (pseudo) using by mutt_block_signals_system () */
457 OPTNEEDRESORT, /* (pseudo) used to force a re-sort */
458 OPTRESORTINIT, /* (pseudo) used to force the next resort to be from scratch */
459 OPTVIEWATTACH, /* (pseudo) signals that we are viewing attachments */
460 OPTFORCEREDRAWINDEX, /* (pseudo) used to force a redraw in the main index */
461 OPTFORCEREDRAWPAGER, /* (pseudo) used to force a redraw in the pager */
462 OPTSORTSUBTHREADS, /* (pseudo) used when $sort_aux changes */
463 OPTNEEDRESCORE, /* (pseudo) set when the `score' command is used */
464 OPTATTACHMSG, /* (pseudo) used by attach-message */
465 OPTHIDEREAD, /* (pseudo) whether or not hide read messages */
466 OPTKEEPQUIET, /* (pseudo) shut up the message and refresh
467 * functions while we are executing an
470 OPTMENUCALLER, /* (pseudo) tell menu to give caller a take */
471 OPTREDRAWTREE, /* (pseudo) redraw the thread tree */
472 OPTPGPCHECKTRUST, /* (pseudo) used by pgp_select_key () */
473 OPTDONTHANDLEPGPKEYS, /* (pseudo) used to extract PGP keys */
474 OPTUNBUFFEREDINPUT, /* (pseudo) don't use key buffer */
477 OPTNEWS, /* (pseudo) used to change reader mode */
478 OPTNEWSSEND, /* (pseudo) used to change behavior when posting */
479 OPTNEWSCACHE, /* (pseudo) used to indicate if news cache exist */
481 OPTSHORTENHIERARCHY, /* set when to shorten "hierarchies" in the sidebar */
482 OPTSIDEBARNEWMAILONLY,
486 #define mutt_bit_alloc(n) p_new(char, (n + 7) / 8)
487 #define mutt_bit_set(v,n) v[n/8] |= (1 << (n % 8))
488 #define mutt_bit_unset(v,n) v[n/8] &= ~(1 << (n % 8))
489 #define mutt_bit_toggle(v,n) v[n/8] ^= (1 << (n % 8))
490 #define mutt_bit_isset(v,n) (v[n/8] & (1 << (n % 8)))
492 #define set_option(x) mutt_bit_set(Options,x)
493 #define unset_option(x) mutt_bit_unset(Options,x)
494 #define toggle_option(x) mutt_bit_toggle(Options,x)
495 #define option(x) mutt_bit_isset(Options,x)
497 typedef struct spam_list_t {
501 struct spam_list_t *next;
505 #define mutt_new_spam_list() p_new(SPAM_LIST, 1)
506 void mutt_free_spam_list (SPAM_LIST **);
508 int mutt_matches_ignore (const char *, string_list_t *);
510 void mutt_init (int, string_list_t *);
512 typedef struct thread {
513 unsigned int fake_thread:1;
514 unsigned int duplicate_thread:1;
515 unsigned int sort_children:1;
516 unsigned int check_subject:1;
517 unsigned int visible:1;
519 unsigned int subtree_visible:2;
520 unsigned int next_subtree_visible:1;
521 struct thread *parent;
522 struct thread *child;
530 /* flag to mutt_pattern_comp() */
531 #define M_FULL_MSG (1<<0) /* enable body and header matching */
534 M_MATCH_FULL_ADDRESS = 1
537 typedef struct pattern_t {
539 unsigned int not : 1;
540 unsigned int alladdr : 1;
541 unsigned int stringmatch : 1;
544 struct pattern_t *next;
545 struct pattern_t *child; /* arguments to logical op */
554 time_t mtime_cur; /* used with maildir folders */
557 char *pattern; /* limit pattern string */
558 pattern_t *limit_pattern; /* compiled limit pattern */
560 HEADER *last_tag; /* last tagged msg. used to link threads */
561 THREAD *tree; /* top of thread tree */
562 HASH *id_hash; /* hash table by msg id */
563 HASH *subj_hash; /* hash table by subject */
564 HASH *thread_hash; /* hash table for threading */
565 int *v2r; /* mapping from virtual to real msgno */
566 int hdrmax; /* number of pointers in hdrs */
567 int msgcount; /* number of messages in the mailbox */
568 int vcount; /* the number of virtual messages */
569 int tagged; /* how many messages are tagged? */
570 int new; /* how many new messages? */
571 int unread; /* how many unread messages? */
572 int deleted; /* how many deleted messages */
573 int appended; /* how many saved messages? */
574 int flagged; /* how many flagged messages */
575 int msgnotreadyet; /* which msg "new" in pager, -1 if none */
576 void *data; /* driver specific data */
578 short magic; /* mailbox type */
580 void *compressinfo; /* compressed mbox module private data */
581 char *realpath; /* path to compressed mailbox */
583 unsigned int locked:1; /* is the mailbox locked? */
584 unsigned int changed:1; /* mailbox has been modified */
585 unsigned int readonly:1; /* don't allow changes to the mailbox */
586 unsigned int dontwrite:1; /* dont write the mailbox on close */
587 unsigned int append:1; /* mailbox is opened in append mode */
588 unsigned int quiet:1; /* inhibit status messages? */
589 unsigned int collapsed:1; /* are all threads collapsed? */
590 unsigned int closing:1; /* mailbox is being closed */
591 unsigned int counting:1; /* do we just want to cound? */
594 /* for attachment counter */
602 /* Flags for mutt_count_body_parts() */
603 #define M_PARTS_TOPLEVEL (1<<0) /* is the top-level part */
604 #define M_PARTS_RECOUNT (1<<1) /* force recount */
610 #endif /* !_MUTT_H */