some muttbug remains
[apps/madmutt.git] / protos.h
1 /*
2  * Copyright notice from original mutt:
3  * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
4  *
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.
8  */
9
10 #ifdef HAVE_CONFIG_H
11 # include "config.h"
12 #endif
13
14 #if HAVE_STDINT_H
15 #include <stdint.h>
16 #elif HAVE_INTTYPES_H
17 #include <inttypes.h>
18 #endif
19
20 #include "mbyte.h"
21
22 #include <lib-lib/buffer.h>
23 #include <lib-lib/mapping.h>
24
25 #define MoreArgs(p) (*p->dptr && *p->dptr != ';' && *p->dptr != '#')
26
27 #define mutt_make_string(A,B,C,D,E) _mutt_make_string(A,B,C,D,E,0)
28 void _mutt_make_string (char *, size_t, const char *, CONTEXT *,
29                         HEADER *, format_flag);
30
31 #define mutt_system(x) _mutt_system(x,0)
32 int _mutt_system (const char *, int);
33
34 #define mutt_new_enter_state() p_new(ENTER_STATE, 1)
35
36 typedef const char *format_t (char *, size_t, char, const char *,
37                               const char *, const char *, const char *,
38                               unsigned long, format_flag);
39
40 void mutt_FormatString (char *, ssize_t, const char *, format_t *,
41                         unsigned long, format_flag);
42 void mutt_generate_boundary (PARAMETER **);
43 void mutt_delete_parameter (const char *attribute, PARAMETER ** p);
44 void mutt_set_parameter (const char *, const char *, PARAMETER **);
45
46 FILE *mutt_open_read (const char *, pid_t *);
47
48 void set_quadoption (int, int);
49 int query_quadoption (int, const char *);
50 int quadoption (int);
51
52 int mutt_option_value (const char* val, char* dst, size_t dstlen);
53
54 address_t *mutt_default_from (void);
55 address_t *mutt_remove_duplicates (address_t *);
56
57 BODY *mutt_make_file_attach (const char *);
58 BODY *mutt_make_message_attach (CONTEXT *, HEADER *, int);
59 BODY *mutt_remove_multipart (BODY *);
60 BODY *mutt_make_multipart (BODY *);
61 BODY *mutt_new_body(void);
62
63 CONTENT *mutt_get_content_info (const char *fname, BODY * b);
64
65 LIST *mutt_make_references (ENVELOPE * e);
66
67 HEADER *mutt_dup_header (HEADER *);
68
69 int mutt_cmp_header (const HEADER*, const HEADER*);
70 int mutt_cmp_addr (const address_t * a, const address_t * b);
71 int mutt_cmp_list (const LIST * a, const LIST * b);
72 int mutt_cmp_env (const ENVELOPE * e1, const ENVELOPE * e2);
73 int mutt_cmp_param (const PARAMETER * p1, const PARAMETER * p2);
74 int mutt_cmp_body (const BODY * b1, const BODY * b2);
75
76 time_t mutt_decrease_mtime (const char *, struct stat *);
77 void mutt_set_mtime (const char*, const char*);
78 time_t mutt_parse_date (const char *, HEADER *);
79 int is_from (const char *, char *, size_t, time_t *);
80
81 char *mutt_charset_hook (const char *);
82 char *mutt_iconv_hook (const char *);
83 char *mutt_expand_path (char *, size_t);
84 char *_mutt_expand_path (char *, size_t, int);
85 char *mutt_find_hook (int, const char *);
86 char *mutt_gecos_name (char *, ssize_t, struct passwd *);
87 char *mutt_gen_msgid (void);
88 char *mutt_get_body_charset (char *, size_t, BODY *);
89 const char *mutt_get_name (address_t *);
90 char *mutt_get_parameter (const char *, PARAMETER *);
91 char *mutt_crypt_hook (address_t *);
92 char *mutt_make_date (char *, size_t);
93
94 const char *mutt_make_version (int full);
95
96 const char *mutt_fqdn (short);
97
98 void mutt_account_hook (const char *url);
99 void mutt_add_to_reference_headers (ENVELOPE * env, ENVELOPE * curenv,
100                                     LIST *** pp, LIST *** qq);
101 void mutt_adv_mktemp (const char*, char*, size_t);
102 void mutt_allow_interrupt (int);
103 void mutt_block_signals (void);
104 void mutt_block_signals_system (void);
105 int mutt_bounce_message (FILE * fp, HEADER *, address_t *);
106 void mutt_canonical_charset (char *, size_t, const char *);
107 void mutt_check_rescore (CONTEXT *);
108 void mutt_clear_error (void);
109 void mutt_default_save (char *, size_t, HEADER *);
110 void mutt_display_address (ENVELOPE *);
111 void mutt_display_sanitize (char *);
112 void mutt_edit_content_type (HEADER *, BODY *, FILE *);
113 void mutt_edit_file (const char *, const char *);
114 void mutt_edit_headers (const char *, const char *, HEADER *, char *, size_t);
115 void mutt_curses_error (const char *, ...);
116 void mutt_curses_message (const char *, ...);
117 void mutt_enter_command (void);
118 void mutt_expand_file_fmt (char *, size_t, const char *, const char *);
119 void mutt_expand_fmt (char *, size_t, const char *, const char *);
120 void mutt_expand_link (char *, const char *, const char *);
121 void mutt_fix_reply_recipients (ENVELOPE * env);
122 void mutt_folder_hook (char *);
123 void mutt_format_string (char *, ssize_t, int, int, int, char, const char *,
124                          ssize_t, int);
125 void mutt_format_s (char *, size_t, const char *, const char *);
126 void mutt_format_s_tree (char *, size_t, const char *, const char *);
127 void mutt_forward_intro (FILE * fp, HEADER * cur);
128 void mutt_forward_trailer (FILE * fp);
129 void mutt_free_body (BODY **);
130 void mutt_free_color (int fg, int bg);
131 void mutt_generate_header (char *, size_t, HEADER *, int);
132 void mutt_help (int);
133 void mutt_draw_tree (CONTEXT *);
134 void mutt_make_attribution (CONTEXT * ctx, HEADER * cur, FILE * out);
135 void mutt_make_forward_subject (ENVELOPE * env, CONTEXT * ctx, HEADER * cur);
136 void mutt_make_help (char *, size_t, char *, int, int);
137 char *mutt_compile_help(char *, size_t, int, struct mapping_t *);
138 void mutt_make_misc_reply_headers (ENVELOPE * env, CONTEXT * ctx,
139                                    HEADER * cur, ENVELOPE * curenv);
140 void mutt_make_post_indent (CONTEXT * ctx, HEADER * cur, FILE * out);
141 void mutt_merge_envelopes (ENVELOPE* base, ENVELOPE** extra);
142 void mutt_message_to_7bit (BODY *, FILE *);
143
144 #define mutt_mktemp(a) _mutt_mktemp (a, __FILE__, __LINE__)
145 void _mutt_mktemp (char *, const char *, int);
146 void mutt_paddstr (int, const char *);
147 void mutt_parse_mime_message (CONTEXT * ctx, HEADER *);
148 #define mutt_perror(a) _mutt_perror (a, __FILE__, __LINE__)
149 void _mutt_perror (const char*, const char*,int);
150 void mutt_prepare_envelope (ENVELOPE *, int);
151 void mutt_unprepare_envelope (ENVELOPE *);
152 void mutt_pretty_mailbox (char *);
153 void mutt_pretty_size (char *, size_t, long);
154 void mutt_pipe_message (HEADER *);
155 void mutt_print_message (HEADER *);
156 void mutt_query_exit (void);
157 void mutt_query_menu (char *, size_t);
158 void mutt_safe_path (char *s, size_t l, address_t * a);
159 void mutt_save_path (char *s, size_t l, address_t * a);
160 void mutt_score_message (CONTEXT *, HEADER *, int);
161 void mutt_select_fcc (char *, size_t, HEADER *);
162
163 #define mutt_select_file(A,B,C) _mutt_select_file(A,B,C,NULL,NULL)
164 void _mutt_select_file (char *, size_t, int, char ***, int *);
165 void mutt_message_hook (CONTEXT *, HEADER *, int);
166 void _mutt_set_flag (CONTEXT *, HEADER *, int, int, int);
167
168 #define mutt_set_flag(a,b,c,d) _mutt_set_flag(a,b,c,d,1)
169 void mutt_set_followup_to (ENVELOPE *);
170 void mutt_shell_escape (void);
171 void mutt_show_error (void);
172 void mutt_signal_init (void);
173 void mutt_stamp_attachment (BODY * a);
174 void mutt_tabs_to_spaces (char *);
175 void mutt_tag_set_flag (int, int);
176 void mutt_unblock_signals (void);
177 void mutt_unblock_signals_system (int);
178 void mutt_update_encoding (BODY * a);
179 void mutt_version (void);
180 void mutt_write_references (LIST *, FILE *);
181 void mutt_write_address_list (address_t * adr, FILE * fp, int linelen,
182                               int display);
183
184 int mutt_addwch (wchar_t);
185 int mutt_alloc_color (int fg, int bg);
186 int mutt_any_key_to_continue (const char *);
187 int mutt_can_decode (BODY *);
188 int mutt_change_flag (HEADER *, int);
189 int mutt_check_key (const char *);
190 int mutt_check_menu (const char *);
191 int mutt_check_month (const char *);
192 int mutt_check_overwrite (const char *, const char *, char *, size_t, int *,
193                           char **);
194 int mutt_check_traditional_pgp (HEADER *, int *);
195 int mutt_command_complete (char *, size_t, int, int);
196 int mutt_var_value_complete (char *, size_t, int);
197 int mutt_complete (char *, size_t);
198 int mutt_copy_body (FILE *, BODY **, BODY *);
199
200 int mutt_display_message (HEADER * h);
201 int mutt_dump_variables (int full);
202 int mutt_edit_message (CONTEXT *, HEADER *);
203 int mutt_fetch_recips (ENVELOPE * out, ENVELOPE * in, int flags);
204 int mutt_chscmp (const char *s, const char *chs);
205
206 #define mutt_is_utf8(a) mutt_chscmp (a, "utf-8")
207 #define mutt_is_us_ascii(a) mutt_chscmp (a, "us-ascii")
208 int mutt_prepare_template (FILE *, CONTEXT *, HEADER *, HEADER *, short);
209 int mutt_resend_message (FILE *, CONTEXT *, HEADER *);
210
211 #define mutt_enter_fname(A,B,C,D,E) _mutt_enter_fname(A,B,C,D,E,0,NULL,NULL)
212 int _mutt_enter_fname (const char *, char *, size_t, int *, int, int,
213                        char ***, int *);
214 #define mutt_get_field(A,B,C,D) _mutt_get_field(A,B,C,D,0,NULL,NULL)
215 int _mutt_get_field (const char *, char *, size_t, int, int, char ***, int *);
216 int mutt_get_field_unbuffered (char *, char *, size_t, int);
217 int mutt_get_hook_type (const char *);
218 int mutt_get_postponed (CONTEXT *, HEADER *, HEADER **, char *, size_t);
219 int mutt_index_menu (void);
220 int mutt_invoke_mta (address_t *, address_t *, address_t *, address_t *, const char *,
221                      int);
222 int mutt_is_mail_list (address_t *);
223 int mutt_is_list_cc (int, address_t *, address_t *);
224 int mutt_is_list_recipient (int, address_t *, address_t *);
225 int mutt_is_subscribed_list (address_t *);
226 int mutt_is_text_part (BODY *);
227 int mutt_is_valid_mailbox (const char *);
228 int mutt_lookup_mime_type (BODY *, const char *);
229 int mutt_match_spam_list (const char *, SPAM_LIST *, char *, int);
230 int mutt_multi_choice (char *prompt, char *letters);
231 int mutt_needs_mailcap (BODY *);
232 int mutt_num_postponed (int);
233 int mutt_parse_bind (BUFFER *, BUFFER *, unsigned long, BUFFER *);
234 int mutt_parse_exec (BUFFER *, BUFFER *, unsigned long, BUFFER *);
235 int mutt_parse_color (BUFFER *, BUFFER *, unsigned long, BUFFER *);
236 int mutt_parse_uncolor (BUFFER *, BUFFER *, unsigned long, BUFFER *);
237 int mutt_parse_hook (BUFFER *, BUFFER *, unsigned long, BUFFER *);
238 int mutt_parse_macro (BUFFER *, BUFFER *, unsigned long, BUFFER *);
239 int mutt_parse_mono (BUFFER *, BUFFER *, unsigned long, BUFFER *);
240 int mutt_parse_unmono (BUFFER *, BUFFER *, unsigned long, BUFFER *);
241 int mutt_parse_push (BUFFER *, BUFFER *, unsigned long, BUFFER *);
242 int mutt_parse_rc_line ( /* const */ char *, BUFFER *, BUFFER *);
243 int mutt_parse_score (BUFFER *, BUFFER *, unsigned long, BUFFER *);
244 int mutt_parse_unscore (BUFFER *, BUFFER *, unsigned long, BUFFER *);
245 int mutt_parse_unhook (BUFFER *, BUFFER *, unsigned long, BUFFER *);
246 int mutt_pattern_func (int, char *);
247 int mutt_query_complete (char *, size_t);
248 int mutt_query_variables (LIST * queries);
249 int _mutt_save_message (HEADER *, CONTEXT *, int, int, int);
250 int mutt_save_message (HEADER *, int, int, int, int *);
251 int mutt_search_command (int, int);
252 int mutt_skipchars (const char *, const char *);
253 int mutt_strwidth (const char *);
254 int mutt_compose_menu (HEADER *, char *, size_t, HEADER *);
255 int mutt_thread_set_flag (HEADER *, int, int, int);
256 int mutt_user_is_recipient (HEADER *);
257 void mutt_update_num_postponed (void);
258 int mutt_wait_filter (pid_t);
259 int mutt_which_case (const char *);
260 int mutt_write_fcc (const char *path, HEADER * hdr, const char *msgid, int,
261                     char *);
262 int mutt_write_mime_body (BODY *, FILE *);
263 int mutt_write_mime_header (BODY *, FILE *);
264 int mutt_write_rfc822_header (FILE *, ENVELOPE *, BODY *, int, int);
265 int mutt_yesorno (const char *, int);
266 void mutt_set_header_color (CONTEXT *, HEADER *);
267 void mutt_sleep (short);
268 int mutt_save_confirm (const char *, struct stat *);
269
270 int mh_valid_message (const char *);
271
272 pid_t mutt_create_filter (const char *, FILE **, FILE **, FILE **);
273 pid_t mutt_create_filter_fd (const char *, FILE **, FILE **, FILE **, int,
274                              int, int);
275
276 /* base64.c */
277 void mutt_to_base64 (unsigned char *, const unsigned char *, size_t, size_t);
278 int mutt_from_base64 (char *, const char *);
279
280 /* utf8.c */
281 int mutt_wctoutf8 (char *s, unsigned int c);
282
283 #define IsPrint(c) (isprint((unsigned char)(c)) || \
284         (option (OPTLOCALES) ? 0 : \
285         ((unsigned char)(c) >= 0xa0)))
286 #define IsWPrint(wc) (iswprint(wc) || \
287         (option (OPTLOCALES) ? 0 : (wc >= 0xa0)))
288
289 #define new_pattern() p_new(pattern_t, 1)
290
291 int mutt_pattern_exec (struct pattern_t *pat, pattern_exec_flag flags,
292                        CONTEXT * ctx, HEADER * h);
293 pattern_t *mutt_pattern_comp ( /* const */ char *s, int flags, BUFFER * err);
294 void mutt_check_simple (char *s, size_t len, const char *simple);
295 void mutt_pattern_free (pattern_t ** pat);
296
297 /* ----------------------------------------------------------------------------
298  * Prototypes for broken systems
299  */
300
301 #ifdef HAVE_SRAND48
302 #define LRAND lrand48
303 #define SRAND srand48
304 #define DRAND drand48
305 #else
306 #define LRAND rand
307 #define SRAND srand
308 #define DRAND (double)rand
309 #endif /* HAVE_SRAND48 */
310
311 /* HP-UX, ConvexOS and UNIXware don't have this macro */
312 #ifndef S_ISLNK
313 #define S_ISLNK(x) (((x) & S_IFMT) == S_IFLNK ? 1 : 0)
314 #endif
315
316 int getdnsdomainname (char *, size_t);
317
318 /* According to SCO support, this is how to detect SCO */
319 #if defined (_M_UNIX) || defined (M_OS)
320 #define SCO
321 #endif
322
323 #ifndef HAVE_SNPRINTF
324 extern int snprintf (char *, size_t, const char *, ...);
325 #endif
326
327 #ifndef HAVE_VSNPRINTF
328 extern int vsnprintf (char *, size_t, const char *, va_list);
329 #endif
330
331 #ifndef HAVE_STRERROR
332 #ifndef STDC_HEADERS
333 extern int sys_nerr;
334 extern char *sys_errlist[];
335 #endif
336
337 #define strerror(x) ((x) > 0 && (x) < sys_nerr) ? sys_errlist[(x)] : 0
338 #endif /* !HAVE_STRERROR */
339
340 #ifndef HAVE_MEMMOVE
341 #define memmove(d,s,n) bcopy((s),(d),(n))
342 #endif
343
344 #ifdef _AIX
345 /* AIX doesn't define these in any headers (sigh) */
346 int strcasecmp (const char *, const char *);
347 int strncasecmp (const char *, const char *, size_t);
348
349 int setegid (gid_t);
350 #endif /* _AIX */
351
352 #ifndef STDC_HEADERS
353 extern FILE *fdopen ();
354 extern int system ();
355 extern int puts ();
356 extern int fputs ();
357 extern int fputc ();
358 extern int fseeko ();
359 extern char *strchr ();
360 extern int getopt ();
361 extern int fputs ();
362 extern int fputc ();
363 extern int fclose ();
364 extern int fprintf ();
365 extern int printf ();
366 extern int fgetc ();
367 extern int tolower ();
368 extern int toupper ();
369 extern int sscanf ();
370 extern size_t fread ();
371 extern size_t fwrite ();
372 extern int system ();
373 extern int rename ();
374 extern time_t time ();
375 extern struct tm *localtime ();
376 extern char *asctime ();
377 extern char *strpbrk ();
378 extern int fflush ();
379 extern long lrand48 ();
380 extern void srand48 ();
381 extern time_t mktime ();
382 extern int vsprintf ();
383 extern int ungetc ();
384 extern char *mktemp ();
385 extern int ftruncate ();
386 extern void *memset ();
387 extern int pclose ();
388 extern int socket ();
389 extern int connect ();
390 extern size_t strftime ();
391 extern int lstat ();
392 extern void rewind ();
393 extern int readlink ();
394
395 /* IRIX barfs on empty var decls because the system include file uses elipsis
396    in the declaration.  So declare all the args to avoid compiler errors.  This
397    should be harmless on other systems.  */
398 int ioctl (int, int, ...);
399
400 #endif
401
402 /* unsorted */
403 void ci_bounce_message (HEADER *, int *);
404 int ci_send_message (int, HEADER *, char *, CONTEXT *, HEADER *);