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