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