2 * Copyright notice from original mutt:
3 * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
5 * This file is part of mutt-ng, see http://www.muttng.org/.
6 * It's licensed under the GNU General Public License,
7 * please see the file GPL in the top level source directory.
22 #define MoreArgs(p) (*p->dptr && *p->dptr != ';' && *p->dptr != '#')
24 #define mutt_make_string(A,B,C,D,E) _mutt_make_string(A,B,C,D,E,0)
25 void _mutt_make_string (char *, size_t, const char *, CONTEXT *,
26 HEADER *, format_flag);
28 #define mutt_system(x) _mutt_system(x,0)
29 int _mutt_system (const char *, int);
31 #define mutt_new_parameter() mem_calloc (1, sizeof (PARAMETER))
32 #define mutt_new_header() mem_calloc (1, sizeof (HEADER))
33 #define mutt_new_envelope() mem_calloc (1, sizeof (ENVELOPE))
34 #define mutt_new_enter_state() mem_calloc (1, sizeof (ENTER_STATE))
36 typedef const char *format_t (char *, size_t, char, const char *,
37 const char *, const char *, const char *,
38 unsigned long, format_flag);
40 void mutt_FormatString (char *, size_t, const char *, format_t *,
41 unsigned long, format_flag);
42 void mutt_parse_content_type (char *, BODY *);
43 void mutt_generate_boundary (PARAMETER **);
44 void mutt_delete_parameter (const char *attribute, PARAMETER ** p);
45 void mutt_set_parameter (const char *, const char *, PARAMETER **);
47 FILE *mutt_open_read (const char *, pid_t *);
49 void set_quadoption (int, int);
50 int query_quadoption (int, const char *);
53 int mutt_option_value (const char* val, char* dst, size_t dstlen);
55 ADDRESS *mutt_default_from (void);
56 ADDRESS *mutt_remove_duplicates (ADDRESS *);
57 ADDRESS *mutt_parse_adrlist (ADDRESS *, const char *);
59 BODY *mutt_make_file_attach (const char *);
60 BODY *mutt_make_message_attach (CONTEXT *, HEADER *, int);
61 BODY *mutt_remove_multipart (BODY *);
62 BODY *mutt_make_multipart (BODY *);
63 BODY *mutt_new_body (void);
64 BODY *mutt_parse_multipart (FILE *, const char *, long, int);
65 BODY *mutt_parse_messageRFC822 (FILE *, BODY *);
66 BODY *mutt_read_mime_header (FILE *, int);
68 CONTENT *mutt_get_content_info (const char *fname, BODY * b);
70 LIST *mutt_make_references (ENVELOPE * e);
71 LIST *mutt_parse_references (char *, int);
73 ENVELOPE *mutt_read_rfc822_header (FILE *, HEADER *, short, short);
74 HEADER *mutt_dup_header (HEADER *);
76 int mutt_cmp_header (const HEADER*, const HEADER*);
77 int mutt_cmp_addr (const ADDRESS * a, const ADDRESS * b);
78 int mutt_cmp_list (const LIST * a, const LIST * b);
79 int mutt_cmp_env (const ENVELOPE * e1, const ENVELOPE * e2);
80 int mutt_cmp_param (const PARAMETER * p1, const PARAMETER * p2);
81 int mutt_cmp_body (const BODY * b1, const BODY * b2);
83 time_t mutt_decrease_mtime (const char *, struct stat *);
84 time_t mutt_local_tz (time_t);
85 time_t mutt_mktime (struct tm *, int);
86 time_t mutt_parse_date (const char *, HEADER *);
87 int is_from (const char *, char *, size_t, time_t *);
89 char *mutt_charset_hook (const char *);
90 char *mutt_iconv_hook (const char *);
91 char *mutt_expand_path (char *, size_t);
92 char *_mutt_expand_path (char *, size_t, int);
93 char *mutt_find_hook (int, const char *);
94 char *mutt_gecos_name (char *, size_t, struct passwd *);
95 char *mutt_gen_msgid (void);
96 char *mutt_get_body_charset (char *, size_t, BODY *);
97 const char *mutt_get_name (ADDRESS *);
98 char *mutt_get_parameter (const char *, PARAMETER *);
99 char *mutt_crypt_hook (ADDRESS *);
100 char *mutt_make_date (char *, size_t);
102 const char *mutt_make_version (int full);
104 const char *mutt_fqdn (short);
106 void mutt_account_hook (const char *url);
107 void mutt_add_to_reference_headers (ENVELOPE * env, ENVELOPE * curenv,
108 LIST *** pp, LIST *** qq);
109 void mutt_adv_mktemp (const char*, char*, size_t);
110 void mutt_allow_interrupt (int);
111 void mutt_block_signals (void);
112 void mutt_block_signals_system (void);
113 int mutt_bounce_message (FILE * fp, HEADER *, ADDRESS *);
114 void mutt_canonical_charset (char *, size_t, const char *);
115 void mutt_check_rescore (CONTEXT *);
116 void mutt_clear_error (void);
117 void mutt_default_save (char *, size_t, HEADER *);
118 void mutt_display_address (ENVELOPE *);
119 void mutt_display_sanitize (char *);
120 void mutt_edit_content_type (HEADER *, BODY *, FILE *);
121 void mutt_edit_file (const char *, const char *);
122 void mutt_edit_headers (const char *, const char *, HEADER *, char *, size_t);
123 void mutt_curses_error (const char *, ...);
124 void mutt_curses_message (const char *, ...);
125 void mutt_enter_command (void);
126 void mutt_expand_file_fmt (char *, size_t, const char *, const char *);
127 void mutt_expand_fmt (char *, size_t, const char *, const char *);
128 void mutt_expand_link (char *, const char *, const char *);
129 void mutt_fix_reply_recipients (ENVELOPE * env);
130 void mutt_folder_hook (char *);
131 void mutt_format_string (char *, size_t, int, int, int, char, const char *,
133 void mutt_format_s (char *, size_t, const char *, const char *);
134 void mutt_format_s_tree (char *, size_t, const char *, const char *);
135 void mutt_forward_intro (FILE * fp, HEADER * cur);
136 void mutt_forward_trailer (FILE * fp);
137 void mutt_free_body (BODY **);
138 void mutt_free_color (int fg, int bg);
139 void mutt_free_envelope (ENVELOPE **);
140 void mutt_free_header (HEADER **);
141 void mutt_free_parameter (PARAMETER **);
142 void mutt_generate_header (char *, size_t, HEADER *, int);
143 void mutt_help (int);
144 void mutt_draw_tree (CONTEXT *);
145 void mutt_make_attribution (CONTEXT * ctx, HEADER * cur, FILE * out);
146 void mutt_make_forward_subject (ENVELOPE * env, CONTEXT * ctx, HEADER * cur);
147 void mutt_make_help (char *, size_t, char *, int, int);
148 void mutt_make_misc_reply_headers (ENVELOPE * env, CONTEXT * ctx,
149 HEADER * cur, ENVELOPE * curenv);
150 void mutt_make_post_indent (CONTEXT * ctx, HEADER * cur, FILE * out);
151 void mutt_merge_envelopes (ENVELOPE* base, ENVELOPE** extra);
152 void mutt_message_to_7bit (BODY *, FILE *);
154 #define mutt_mktemp(a) _mutt_mktemp (a, __FILE__, __LINE__)
155 void _mutt_mktemp (char *, const char *, int);
156 void mutt_normalize_time (struct tm *);
157 void mutt_paddstr (int, const char *);
158 void mutt_parse_mime_message (CONTEXT * ctx, HEADER *);
159 void mutt_parse_part (FILE *, BODY *);
160 #define mutt_perror(a) _mutt_perror (a, __FILE__, __LINE__)
161 void _mutt_perror (const char*, const char*,int);
162 void mutt_prepare_envelope (ENVELOPE *, int);
163 void mutt_unprepare_envelope (ENVELOPE *);
164 void mutt_pretty_mailbox (char *);
165 void mutt_pretty_size (char *, size_t, long);
166 void mutt_pipe_message (HEADER *);
167 void mutt_print_message (HEADER *);
168 void mutt_print_patchlist (void);
169 void mutt_query_exit (void);
170 void mutt_query_menu (char *, size_t);
171 void mutt_safe_path (char *s, size_t l, ADDRESS * a);
172 void mutt_save_path (char *s, size_t l, ADDRESS * a);
173 void mutt_score_message (CONTEXT *, HEADER *, int);
174 void mutt_select_fcc (char *, size_t, HEADER *);
176 #define mutt_select_file(A,B,C) _mutt_select_file(A,B,C,NULL,NULL)
177 void _mutt_select_file (char *, size_t, int, char ***, int *);
178 void mutt_message_hook (CONTEXT *, HEADER *, int);
179 void _mutt_set_flag (CONTEXT *, HEADER *, int, int, int);
181 #define mutt_set_flag(a,b,c,d) _mutt_set_flag(a,b,c,d,1)
182 void mutt_set_followup_to (ENVELOPE *);
183 void mutt_shell_escape (void);
184 void mutt_show_error (void);
185 void mutt_signal_init (void);
186 void mutt_stamp_attachment (BODY * a);
187 void mutt_tabs_to_spaces (char *);
188 void mutt_tag_set_flag (int, int);
189 void mutt_unblock_signals (void);
190 void mutt_unblock_signals_system (int);
191 void mutt_update_encoding (BODY * a);
192 void mutt_version (void);
193 void mutt_write_references (LIST *, FILE *);
194 void mutt_write_address_list (ADDRESS * adr, FILE * fp, int linelen,
197 int mutt_addwch (wchar_t);
198 int mutt_alloc_color (int fg, int bg);
199 int mutt_any_key_to_continue (const char *);
200 int mutt_builtin_editor (const char *, HEADER *, HEADER *);
201 int mutt_can_decode (BODY *);
202 int mutt_change_flag (HEADER *, int);
203 int mutt_check_encoding (const char *);
204 int mutt_check_key (const char *);
205 int mutt_check_menu (const char *);
206 int mutt_check_mime_type (const char *);
207 int mutt_check_month (const char *);
208 int mutt_check_overwrite (const char *, const char *, char *, size_t, int *,
210 int mutt_check_traditional_pgp (HEADER *, int *);
211 int mutt_command_complete (char *, size_t, int, int);
212 int mutt_var_value_complete (char *, size_t, int);
213 int mutt_complete (char *, size_t);
214 int mutt_copy_body (FILE *, BODY **, BODY *);
216 int mutt_display_message (HEADER * h);
217 int mutt_dump_variables (int full);
218 int mutt_edit_message (CONTEXT *, HEADER *);
219 int mutt_fetch_recips (ENVELOPE * out, ENVELOPE * in, int flags);
220 int mutt_chscmp (const char *s, const char *chs);
222 #define mutt_is_utf8(a) mutt_chscmp (a, "utf-8")
223 #define mutt_is_us_ascii(a) mutt_chscmp (a, "us-ascii")
224 int mutt_prepare_template (FILE *, CONTEXT *, HEADER *, HEADER *, short);
225 int mutt_resend_message (FILE *, CONTEXT *, HEADER *);
227 #define mutt_enter_fname(A,B,C,D,E) _mutt_enter_fname(A,B,C,D,E,0,NULL,NULL)
228 int _mutt_enter_fname (const char *, char *, size_t, int *, int, int,
230 #define mutt_get_field(A,B,C,D) _mutt_get_field(A,B,C,D,0,NULL,NULL)
231 int _mutt_get_field (char *, char *, size_t, int, int, char ***, int *);
232 int mutt_get_field_unbuffered (char *, char *, size_t, int);
233 int mutt_get_hook_type (const char *);
234 int mutt_get_postponed (CONTEXT *, HEADER *, HEADER **, char *, size_t);
235 int mutt_index_menu (void);
236 int mutt_invoke_mta (ADDRESS *, ADDRESS *, ADDRESS *, ADDRESS *, const char *,
238 int mutt_is_mail_list (ADDRESS *);
239 int mutt_is_list_cc (int, ADDRESS *, ADDRESS *);
240 int mutt_is_list_recipient (int, ADDRESS *, ADDRESS *);
241 int mutt_is_subscribed_list (ADDRESS *);
242 int mutt_is_text_part (BODY *);
243 int mutt_is_valid_mailbox (const char *);
244 int mutt_lookup_mime_type (BODY *, const char *);
245 int mutt_match_spam_list (const char *, SPAM_LIST *, char *, int);
246 int mutt_multi_choice (char *prompt, char *letters);
247 int mutt_needs_mailcap (BODY *);
248 int mutt_num_postponed (int);
249 int mutt_parse_bind (BUFFER *, BUFFER *, unsigned long, BUFFER *);
250 int mutt_parse_exec (BUFFER *, BUFFER *, unsigned long, BUFFER *);
251 int mutt_parse_color (BUFFER *, BUFFER *, unsigned long, BUFFER *);
252 int mutt_parse_uncolor (BUFFER *, BUFFER *, unsigned long, BUFFER *);
253 int mutt_parse_hook (BUFFER *, BUFFER *, unsigned long, BUFFER *);
254 int mutt_parse_macro (BUFFER *, BUFFER *, unsigned long, BUFFER *);
255 int mutt_parse_mono (BUFFER *, BUFFER *, unsigned long, BUFFER *);
256 int mutt_parse_unmono (BUFFER *, BUFFER *, unsigned long, BUFFER *);
257 int mutt_parse_push (BUFFER *, BUFFER *, unsigned long, BUFFER *);
258 int mutt_parse_rc_line ( /* const */ char *, BUFFER *, BUFFER *);
259 int mutt_parse_rfc822_line (ENVELOPE * e, HEADER * hdr, char *line, char *p,
260 short user_hdrs, short weed, short do_2047,
262 int mutt_parse_score (BUFFER *, BUFFER *, unsigned long, BUFFER *);
263 int mutt_parse_unscore (BUFFER *, BUFFER *, unsigned long, BUFFER *);
264 int mutt_parse_unhook (BUFFER *, BUFFER *, unsigned long, BUFFER *);
265 int mutt_pattern_func (int, char *);
266 int mutt_query_complete (char *, size_t);
267 int mutt_query_variables (LIST * queries);
268 int _mutt_save_message (HEADER *, CONTEXT *, int, int, int);
269 int mutt_save_message (HEADER *, int, int, int, int *);
270 int mutt_search_command (int, int);
271 int mutt_skipchars (const char *, const char *);
272 int mutt_strwidth (const char *);
273 int mutt_compose_menu (HEADER *, char *, size_t, HEADER *);
274 int mutt_thread_set_flag (HEADER *, int, int, int);
275 int mutt_user_is_recipient (HEADER *);
276 void mutt_update_num_postponed (void);
277 int mutt_wait_filter (pid_t);
278 int mutt_which_case (const char *);
279 int mutt_write_fcc (const char *path, HEADER * hdr, const char *msgid, int,
281 int mutt_write_mime_body (BODY *, FILE *);
282 int mutt_write_mime_header (BODY *, FILE *);
283 int mutt_write_rfc822_header (FILE *, ENVELOPE *, BODY *, int, int);
284 int mutt_yesorno (const char *, int);
285 void mutt_set_header_color (CONTEXT *, HEADER *);
286 void mutt_sleep (short);
287 int mutt_save_confirm (const char *, struct stat *);
289 int mh_valid_message (const char *);
291 pid_t mutt_create_filter (const char *, FILE **, FILE **, FILE **);
292 pid_t mutt_create_filter_fd (const char *, FILE **, FILE **, FILE **, int,
296 void mutt_to_base64 (unsigned char *, const unsigned char *, size_t, size_t);
297 int mutt_from_base64 (char *, const char *);
300 int mutt_wctoutf8 (char *s, unsigned int c);
303 #define IsPrint(c) (isprint((unsigned char)(c)) || \
304 ((unsigned char)(c) >= 0xa0))
305 #define IsWPrint(wc) (iswprint(wc) || wc >= 0xa0)
307 #define IsPrint(c) (isprint((unsigned char)(c)) || \
308 (option (OPTLOCALES) ? 0 : \
309 ((unsigned char)(c) >= 0xa0)))
310 #define IsWPrint(wc) (iswprint(wc) || \
311 (option (OPTLOCALES) ? 0 : (wc >= 0xa0)))
314 #define new_pattern() mem_calloc(1, sizeof (pattern_t))
316 int mutt_pattern_exec (struct pattern_t *pat, pattern_exec_flag flags,
317 CONTEXT * ctx, HEADER * h);
318 pattern_t *mutt_pattern_comp ( /* const */ char *s, int flags, BUFFER * err);
319 void mutt_check_simple (char *s, size_t len, const char *simple);
320 void mutt_pattern_free (pattern_t ** pat);
322 /* ----------------------------------------------------------------------------
323 * Prototypes for broken systems
327 #define LRAND lrand48
328 #define SRAND srand48
329 #define DRAND drand48
333 #define DRAND (double)rand
334 #endif /* HAVE_SRAND48 */
336 /* HP-UX, ConvexOS and UNIXware don't have this macro */
338 #define S_ISLNK(x) (((x) & S_IFMT) == S_IFLNK ? 1 : 0)
341 int getdnsdomainname (char *, size_t);
343 /* According to SCO support, this is how to detect SCO */
344 #if defined (_M_UNIX) || defined (M_OS)
348 /* SCO Unix uses chsize() instead of ftruncate() */
349 #ifndef HAVE_FTRUNCATE
350 #define ftruncate chsize
353 #ifndef HAVE_SNPRINTF
354 extern int snprintf (char *, size_t, const char *, ...);
357 #ifndef HAVE_VSNPRINTF
358 extern int vsnprintf (char *, size_t, const char *, va_list);
361 #ifndef HAVE_STRERROR
364 extern char *sys_errlist[];
367 #define strerror(x) ((x) > 0 && (x) < sys_nerr) ? sys_errlist[(x)] : 0
368 #endif /* !HAVE_STRERROR */
371 #define memmove(d,s,n) bcopy((s),(d),(n))
374 /* AIX doesn't define these in any headers (sigh) */
375 int strcasecmp (const char *, const char *);
376 int strncasecmp (const char *, const char *, size_t);
383 extern FILE *fdopen ();
384 extern int system ();
389 extern char *strchr ();
390 extern int getopt ();
393 extern int fclose ();
394 extern int fprintf ();
395 extern int printf ();
397 extern int tolower ();
398 extern int toupper ();
399 extern int sscanf ();
400 extern size_t fread ();
401 extern size_t fwrite ();
402 extern int system ();
403 extern int rename ();
404 extern time_t time ();
405 extern struct tm *localtime ();
406 extern char *asctime ();
407 extern char *strpbrk ();
408 extern int fflush ();
409 extern long lrand48 ();
410 extern void srand48 ();
411 extern time_t mktime ();
412 extern int vsprintf ();
413 extern int ungetc ();
414 extern char *mktemp ();
415 extern int ftruncate ();
416 extern void *memset ();
417 extern int pclose ();
418 extern int socket ();
419 extern int connect ();
420 extern size_t strftime ();
422 extern void rewind ();
423 extern int readlink ();
425 /* IRIX barfs on empty var decls because the system include file uses elipsis
426 in the declaration. So declare all the args to avoid compiler errors. This
427 should be harmless on other systems. */
428 int ioctl (int, int, ...);
433 void ci_bounce_message (HEADER *, int *);
434 int ci_send_message (int, HEADER *, char *, CONTEXT *, HEADER *);