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