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