]> git.llucax.com Git - software/mutt-debian.git/blob - protos.h
Move Mutt with NNTP support to mutt-nntp package
[software/mutt-debian.git] / protos.h
1 /*
2  * Copyright (C) 1996-2000,2007 Michael R. Elkins <me@mutt.org>
3  * 
4  *     This program is free software; you can redistribute it and/or modify
5  *     it under the terms of the GNU General Public License as published by
6  *     the Free Software Foundation; either version 2 of the License, or
7  *     (at your option) any later version.
8  * 
9  *     This program is distributed in the hope that it will be useful,
10  *     but WITHOUT ANY WARRANTY; without even the implied warranty of
11  *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  *     GNU General Public License for more details.
13  * 
14  *     You should have received a copy of the GNU General Public License
15  *     along with this program; if not, write to the Free Software
16  *     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17  */ 
18
19
20 #ifdef HAVE_INTTYPES_H
21 # include <inttypes.h>
22 #endif
23
24 #include "mbyte.h"
25
26 #define MoreArgs(p) (*p->dptr && *p->dptr != ';' && *p->dptr != '#')
27
28 #define mutt_make_string(A,B,C,D,E) _mutt_make_string(A,B,C,D,E,0)
29 void _mutt_make_string (char *, size_t, const char *, CONTEXT *,
30         HEADER *, format_flag);
31
32 struct hdr_format_info
33 {
34   CONTEXT *ctx;
35   HEADER *hdr;
36   const char *pager_progress;
37 };
38
39 void mutt_make_string_info (char *, size_t, const char *, struct hdr_format_info *, format_flag);
40
41 int mutt_extract_token (BUFFER *, BUFFER *, int);
42 BUFFER * mutt_buffer_init (BUFFER *);
43 BUFFER * mutt_buffer_from (BUFFER *, char *);
44 void mutt_buffer_free(BUFFER **);
45 int mutt_buffer_printf (BUFFER*, const char*, ...);
46 void mutt_buffer_add (BUFFER*, const char*, size_t);
47 void mutt_buffer_addstr (BUFFER*, const char*);
48 void mutt_buffer_addch (BUFFER*, char);
49 void mutt_free_opts (void);
50
51 #define mutt_system(x) _mutt_system(x,0)
52 int _mutt_system (const char *, int);
53
54 #define mutt_next_thread(x) _mutt_aside_thread(x,1,0)
55 #define mutt_previous_thread(x) _mutt_aside_thread(x,0,0)
56 #define mutt_next_subthread(x) _mutt_aside_thread(x,1,1)
57 #define mutt_previous_subthread(x) _mutt_aside_thread(x,0,1)
58 int _mutt_aside_thread (HEADER *, short, short);
59
60 #define mutt_collapse_thread(x,y) _mutt_traverse_thread (x,y,M_THREAD_COLLAPSE)
61 #define mutt_uncollapse_thread(x,y) _mutt_traverse_thread (x,y,M_THREAD_UNCOLLAPSE)
62 #define mutt_get_hidden(x,y)_mutt_traverse_thread (x,y,M_THREAD_GET_HIDDEN) 
63 #define mutt_thread_contains_unread(x,y) _mutt_traverse_thread (x,y,M_THREAD_UNREAD)
64 #define mutt_thread_next_unread(x,y) _mutt_traverse_thread(x,y,M_THREAD_NEXT_UNREAD)
65 int _mutt_traverse_thread (CONTEXT *ctx, HEADER *hdr, int flag);
66
67
68 #define mutt_new_parameter() safe_calloc (1, sizeof (PARAMETER))
69 #define mutt_new_header() safe_calloc (1, sizeof (HEADER))
70 #define mutt_new_envelope() safe_calloc (1, sizeof (ENVELOPE))
71 #define mutt_new_enter_state() safe_calloc (1, sizeof (ENTER_STATE))
72
73 typedef const char * format_t (char *, size_t, size_t, char, const char *, const char *, const char *, const char *, unsigned long, format_flag);
74
75 void mutt_FormatString (char *, size_t, size_t, const char *, format_t *, unsigned long, format_flag);
76 void mutt_parse_content_type (char *, BODY *);
77 void mutt_generate_boundary (PARAMETER **);
78 void mutt_delete_parameter (const char *attribute, PARAMETER **p);
79 void mutt_set_parameter (const char *, const char *, PARAMETER **);
80
81
82 FILE *mutt_open_read (const char *, pid_t *);
83
84 void set_quadoption (int, int);
85 int query_quadoption (int, const char *);
86 int quadoption (int);
87
88 char* mutt_extract_message_id (const char *, const char **);
89
90 ADDRESS *mutt_default_from (void);
91 ADDRESS *mutt_get_address (ENVELOPE *, char **);
92 ADDRESS *mutt_lookup_alias (const char *s);
93 ADDRESS *mutt_remove_duplicates (ADDRESS *);
94 ADDRESS *mutt_remove_xrefs (ADDRESS *, ADDRESS *);
95 ADDRESS *mutt_expand_aliases (ADDRESS *);
96 ADDRESS *mutt_parse_adrlist (ADDRESS *, const char *);
97
98 BODY *mutt_make_file_attach (const char *);
99 BODY *mutt_make_message_attach (CONTEXT *, HEADER *, int);
100 BODY *mutt_remove_multipart (BODY *);
101 BODY *mutt_make_multipart (BODY *);
102 BODY *mutt_new_body (void);
103 BODY *mutt_parse_multipart (FILE *, const char *, LOFF_T, int);
104 BODY *mutt_parse_messageRFC822 (FILE *, BODY *);
105 BODY *mutt_read_mime_header (FILE *, int);
106
107 CONTENT *mutt_get_content_info (const char *fname, BODY *b);
108
109 HASH *mutt_make_id_hash (CONTEXT *);
110 HASH *mutt_make_subj_hash (CONTEXT *);
111
112 LIST *mutt_make_references(ENVELOPE *e);
113
114 char *mutt_read_rfc822_line (FILE *, char *, size_t *);
115 ENVELOPE *mutt_read_rfc822_header (FILE *, HEADER *, short, short);
116 HEADER *mutt_dup_header (HEADER *);
117
118 void mutt_set_mtime (const char *from, const char *to);
119 time_t mutt_decrease_mtime (const char *, struct stat *);
120 time_t mutt_local_tz (time_t);
121 time_t mutt_mktime (struct tm *, int);
122 time_t mutt_parse_date (const char *, HEADER *);
123 int is_from (const char *, char *, size_t, time_t *);
124
125 const char *mutt_attach_fmt (
126         char *dest,
127         size_t destlen,
128         size_t col,
129         char op,
130         const char *src,
131         const char *prefix,
132         const char *ifstring,
133         const char *elsestring,
134         unsigned long data,
135         format_flag flags);
136
137
138 char *mutt_charset_hook (const char *);
139 char *mutt_iconv_hook (const char *);
140 char *mutt_expand_path (char *, size_t);
141 char *_mutt_expand_path (char *, size_t, int);
142 char *mutt_find_hook (int, const char *);
143 char *mutt_gecos_name (char *, size_t, struct passwd *);
144 char *mutt_gen_msgid (void);
145 char *mutt_get_body_charset (char *, size_t, BODY *);
146 const char *mutt_get_name (ADDRESS *);
147 char *mutt_get_parameter (const char *, PARAMETER *);
148 char *mutt_crypt_hook (ADDRESS *);
149 char *mutt_make_date (char *, size_t);
150
151 const char *mutt_make_version (void);
152
153 const char *mutt_fqdn(short);
154
155 group_t *mutt_pattern_group (const char *);
156
157 REGEXP *mutt_compile_regexp (const char *, int);
158
159 void mutt_account_hook (const char* url);
160 void mutt_add_to_reference_headers (ENVELOPE *env, ENVELOPE *curenv, LIST ***pp, LIST ***qq);
161 void mutt_adv_mktemp (char *, size_t);
162 void mutt_alias_menu (char *, size_t, ALIAS *);
163 void mutt_allow_interrupt (int);
164 void mutt_attach_init (BODY *);
165 void mutt_block_signals (void);
166 void mutt_block_signals_system (void);
167 int mutt_body_handler (BODY *, STATE *);
168 int  mutt_bounce_message (FILE *fp, HEADER *, ADDRESS *);
169 void mutt_break_thread (HEADER *);
170 void mutt_buffy (char *, size_t);
171 int  mutt_buffy_list (void);
172 void mutt_canonical_charset (char *, size_t, const char *);
173 int mutt_count_body_parts (CONTEXT *, HEADER *);
174 void mutt_check_rescore (CONTEXT *);
175 void mutt_clear_error (void);
176 void mutt_create_alias (ENVELOPE *, ADDRESS *);
177 void mutt_decode_attachment (BODY *, STATE *);
178 void mutt_decode_base64 (STATE *s, long len, int istext, iconv_t cd);
179 void mutt_default_save (char *, size_t, HEADER *);
180 void mutt_display_address (ENVELOPE *);
181 void mutt_display_sanitize (char *);
182 void mutt_edit_content_type (HEADER *, BODY *, FILE *);
183 void mutt_edit_file (const char *, const char *);
184 void mutt_edit_headers (const char *, const char *, HEADER *, char *, size_t);
185 int mutt_filter_unprintable (char **);
186 void mutt_curses_error (const char *, ...);
187 void mutt_curses_message (const char *, ...);
188 void mutt_encode_path (char *, size_t, const char *);
189 void mutt_enter_command (void);
190 void mutt_expand_aliases_env (ENVELOPE *);
191 void mutt_expand_file_fmt (char *, size_t, const char *, const char *);
192 void mutt_expand_fmt (char *, size_t, const char *, const char *);
193 void mutt_expand_link (char *, const char *, const char *);
194 void mutt_fix_reply_recipients (ENVELOPE *env);
195 void mutt_folder_hook (char *);
196 void mutt_format_string (char *, size_t, int, int, int, char, const char *, size_t, int);
197 void mutt_format_s (char *, size_t, const char *, const char *);
198 void mutt_format_s_tree (char *, size_t, const char *, const char *);
199 void mutt_forward_intro (FILE *fp, HEADER *cur);
200 void mutt_forward_trailer (FILE *fp);
201 void mutt_free_alias (ALIAS **);
202 void mutt_free_body (BODY **);
203 void mutt_free_color (int fg, int bg);
204 void mutt_free_enter_state (ENTER_STATE **);
205 void mutt_free_envelope (ENVELOPE **);
206 void mutt_free_header (HEADER **);
207 void mutt_free_parameter (PARAMETER **);
208 void mutt_free_regexp (REGEXP **);
209 void mutt_generate_header (char *, size_t, HEADER *, int);
210 void mutt_help (int);
211 void mutt_draw_tree (CONTEXT *);
212 void mutt_check_lookup_list (BODY *, char *, int);
213 void mutt_make_attribution (CONTEXT *ctx, HEADER *cur, FILE *out);
214 void mutt_make_forward_subject (ENVELOPE *env, CONTEXT *ctx, HEADER *cur);
215 void mutt_make_help (char *, size_t, char *, int, int);
216 void mutt_make_misc_reply_headers (ENVELOPE *env, CONTEXT *ctx, HEADER *cur, ENVELOPE *curenv);
217 void mutt_make_post_indent (CONTEXT *ctx, HEADER *cur, FILE *out);
218 void mutt_merge_envelopes(ENVELOPE* base, ENVELOPE** extra);
219 void mutt_message_to_7bit (BODY *, FILE *);
220 #define mutt_mktemp(a,b) _mutt_mktemp (a, b, __FILE__, __LINE__)
221 void _mutt_mktemp (char *, size_t, const char *, int);
222 void mutt_normalize_time (struct tm *);
223 void mutt_paddstr (int, const char *);
224 void mutt_parse_mime_message (CONTEXT *ctx, HEADER *);
225 void mutt_parse_part (FILE *, BODY *);
226 void mutt_perror (const char *);
227 void mutt_prepare_envelope (ENVELOPE *, int);
228 void mutt_unprepare_envelope (ENVELOPE *);
229 void mutt_pretty_mailbox (char *, size_t);
230 void mutt_pretty_size (char *, size_t, LOFF_T);
231 void mutt_pipe_message (HEADER *);
232 void mutt_print_message (HEADER *);
233 void mutt_print_patchlist (void);
234 void mutt_query_exit (void);
235 void mutt_query_menu (char *, size_t);
236 void mutt_safe_path (char *s, size_t l, ADDRESS *a);
237 void mutt_save_path (char *s, size_t l, ADDRESS *a);
238 void mutt_score_message (CONTEXT *, HEADER *, int);
239 void mutt_select_fcc (char *, size_t, HEADER *);
240 #define mutt_select_file(A,B,C) _mutt_select_file(A,B,C,NULL,NULL)
241 void _mutt_select_file (char *, size_t, int, char ***, int *);
242 void mutt_message_hook (CONTEXT *, HEADER *, int);
243 void _mutt_set_flag (CONTEXT *, HEADER *, int, int, int);
244 #define mutt_set_flag(a,b,c,d) _mutt_set_flag(a,b,c,d,1)
245 void mutt_set_followup_to (ENVELOPE *);
246 void mutt_shell_escape (void);
247 void mutt_show_error (void);
248 void mutt_signal_init (void);
249 void mutt_stamp_attachment (BODY *a);
250 void mutt_tabs_to_spaces (char *);
251 void mutt_tag_set_flag (int, int);
252 void mutt_unblock_signals (void);
253 void mutt_unblock_signals_system (int);
254 void mutt_update_encoding (BODY *a);
255 void mutt_version (void);
256 void mutt_view_attachments (HEADER *);
257 void mutt_write_address_list (ADDRESS *adr, FILE *fp, int linelen, int display);
258 void mutt_set_virtual (CONTEXT *);
259
260 int mutt_add_to_rx_list (RX_LIST **list, const char *s, int flags, BUFFER *err);
261 int mutt_addr_is_user (ADDRESS *);
262 int mutt_addwch (wchar_t);
263 int mutt_alias_complete (char *, size_t);
264 void mutt_alias_add_reverse (ALIAS *t);
265 void mutt_alias_delete_reverse (ALIAS *t);
266 int mutt_alloc_color (int fg, int bg);
267 int mutt_any_key_to_continue (const char *);
268 int mutt_buffy_check (int);
269 int mutt_buffy_notify (void);
270 int mutt_builtin_editor (const char *, HEADER *, HEADER *);
271 int mutt_can_decode (BODY *);
272 int mutt_change_flag (HEADER *, int);
273 int mutt_check_alias_name (const char *, char *, size_t);
274 int mutt_check_encoding (const char *);
275 int mutt_check_key (const char *);
276 int mutt_check_menu (const char *);
277 int mutt_check_mime_type (const char *);
278 int mutt_check_month (const char *);
279 int mutt_check_overwrite (const char *, const char *, char *, size_t, int *, char **);
280 int mutt_check_traditional_pgp (HEADER *, int *);
281 int mutt_command_complete (char *, size_t, int, int);
282 int mutt_var_value_complete (char *, size_t, int);
283 int mutt_complete (char *, size_t);
284 int mutt_compose_attachment (BODY *a);
285 int mutt_copy_body (FILE *, BODY **, BODY *);
286 int mutt_decode_save_attachment (FILE *, BODY *, char *, int, int);
287 int mutt_display_message (HEADER *h);
288 int mutt_dump_variables (void);
289 int mutt_edit_attachment(BODY *);
290 int mutt_edit_message (CONTEXT *, HEADER *);
291 int mutt_fetch_recips (ENVELOPE *out, ENVELOPE *in, int flags);
292 int mutt_chscmp (const char *s, const char *chs);
293 #define mutt_is_utf8(a) mutt_chscmp (a, "utf-8")
294 #define mutt_is_us_ascii(a) mutt_chscmp (a, "us-ascii")
295 int mutt_parent_message (CONTEXT *, HEADER *);
296 int mutt_prepare_template(FILE*, CONTEXT *, HEADER *, HEADER *, short);
297 int mutt_resend_message (FILE *, CONTEXT *, HEADER *);
298 #define mutt_enter_fname(A,B,C,D,E) _mutt_enter_fname(A,B,C,D,E,0,NULL,NULL)
299 int _mutt_enter_fname (const char *, char *, size_t, int *, int, int, char ***, int *);
300 int  mutt_enter_string (char *buf, size_t buflen, int y, int x, int flags);
301 int _mutt_enter_string (char *, size_t, int, int, int, int, char ***, int *, ENTER_STATE *);
302 #define mutt_get_field(A,B,C,D) _mutt_get_field(A,B,C,D,0,NULL,NULL)
303 int _mutt_get_field (char *, char *, size_t, int, int, char ***, int *);
304 int mutt_get_hook_type (const char *);
305 int mutt_get_field_unbuffered (char *, char *, size_t, int);
306 #define mutt_get_password(A,B,C) mutt_get_field_unbuffered(A,B,C,M_PASS)
307 int mutt_get_postponed (CONTEXT *, HEADER *, HEADER **, char *, size_t);
308 int mutt_get_tmp_attachment (BODY *);
309 int mutt_index_menu (void);
310 int mutt_invoke_sendmail (ADDRESS *, ADDRESS *, ADDRESS *, ADDRESS *, const char *, int);
311 int mutt_is_autoview (BODY *, const char *);
312 int mutt_is_mail_list (ADDRESS *);
313 int mutt_is_message_type(int, const char *);
314 int mutt_is_list_cc (int, ADDRESS *, ADDRESS *);
315 int mutt_is_list_recipient (int, ADDRESS *, ADDRESS *);
316 int mutt_is_subscribed_list (ADDRESS *);
317 int mutt_is_text_part (BODY *);
318 int mutt_is_valid_mailbox (const char *);
319 int mutt_link_threads (HEADER *, HEADER *, CONTEXT *);
320 int mutt_lookup_mime_type (BODY *, const char *);
321 int mutt_match_rx_list (const char *, RX_LIST *);
322 int mutt_match_spam_list (const char *, SPAM_LIST *, char *, int);
323 int mutt_messages_in_thread (CONTEXT *, HEADER *, int);
324 int mutt_multi_choice (char *prompt, char *letters);
325 int mutt_needs_mailcap (BODY *);
326 int mutt_num_postponed (int);
327 int mutt_parse_bind (BUFFER *, BUFFER *, unsigned long, BUFFER *);
328 int mutt_parse_exec (BUFFER *, BUFFER *, unsigned long, BUFFER *);
329 int mutt_parse_color (BUFFER *, BUFFER *, unsigned long, BUFFER *);
330 int mutt_parse_uncolor (BUFFER *, BUFFER *, unsigned long, BUFFER *);
331 int mutt_parse_hook (BUFFER *, BUFFER *, unsigned long, BUFFER *);
332 int mutt_parse_macro (BUFFER *, BUFFER *, unsigned long, BUFFER *);
333 int mutt_parse_mailboxes (BUFFER *, BUFFER *, unsigned long, BUFFER *);
334 int mutt_parse_mono (BUFFER *, BUFFER *, unsigned long, BUFFER *);
335 int mutt_parse_unmono (BUFFER *, BUFFER *, unsigned long, BUFFER *);
336 int mutt_parse_push (BUFFER *, BUFFER *, unsigned long, BUFFER *);
337 int mutt_parse_rc_line (/* const */ char *, BUFFER *, BUFFER *);
338 int mutt_parse_rfc822_line (ENVELOPE *e, HEADER *hdr, char *line, char *p,
339   short user_hdrs, short weed, short do_2047, LIST **lastp);
340 int mutt_parse_score (BUFFER *, BUFFER *, unsigned long, BUFFER *);
341 int mutt_parse_unscore (BUFFER *, BUFFER *, unsigned long, BUFFER *);
342 int mutt_parse_unhook (BUFFER *, BUFFER *, unsigned long, BUFFER *);
343 int mutt_pattern_func (int, char *);
344 int mutt_pipe_attachment (FILE *, BODY *, const char *, char *); 
345 int mutt_print_attachment (FILE *, BODY *);
346 int mutt_query_complete (char *, size_t);
347 int mutt_query_variables (LIST *queries);
348 int mutt_save_attachment (FILE *, BODY *, char *, int, HEADER *);
349 int _mutt_save_message (HEADER *, CONTEXT *, int, int, int);
350 int mutt_save_message (HEADER *, int, int, int, int *);
351 int mutt_search_command (int, int);
352 #ifdef USE_SMTP
353 int mutt_smtp_send (const ADDRESS *, const ADDRESS *, const ADDRESS *,
354                     const ADDRESS *, const char *, int);
355 #endif
356 int mutt_wstr_trunc (const char *, size_t, size_t, size_t *);
357 int mutt_charlen (const char *s, int *);
358 int mutt_strwidth (const char *);
359 int mutt_compose_menu (HEADER *, char *, size_t, HEADER *);
360 int mutt_thread_set_flag (HEADER *, int, int, int);
361 int mutt_user_is_recipient (HEADER *);
362 void mutt_update_num_postponed (void);
363 int mutt_wait_filter (pid_t);
364 int mutt_which_case (const char *);
365 int mutt_write_fcc (const char *path, HEADER *hdr, const char *msgid, int, char *);
366 int mutt_write_mime_body (BODY *, FILE *);
367 int mutt_write_mime_header (BODY *, FILE *);
368 int mutt_write_one_header (FILE *fp, const char *tag, const char *value, const char *pfx, int wraplen, int flags);
369 int mutt_write_rfc822_header (FILE *, ENVELOPE *, BODY *, int, int);
370 void mutt_write_references (LIST *, FILE *, int);
371 int mutt_yesorno (const char *, int);
372 void mutt_set_header_color(CONTEXT *, HEADER *);
373 void mutt_sleep (short);
374 int mutt_save_confirm (const char  *, struct stat *);
375
376 int mh_valid_message (const char *);
377
378 pid_t mutt_create_filter (const char *, FILE **, FILE **, FILE **);
379 pid_t mutt_create_filter_fd (const char *, FILE **, FILE **, FILE **, int, int, int);
380
381 ADDRESS *alias_reverse_lookup (ADDRESS *);
382
383 /* base64.c */
384 void mutt_to_base64 (unsigned char*, const unsigned char*, size_t, size_t);
385 int mutt_from_base64 (char*, const char*);
386
387 /* utf8.c */
388 int mutt_wctoutf8 (char *s, unsigned int c, size_t buflen);
389
390 #ifdef LOCALES_HACK
391 #define IsPrint(c) (isprint((unsigned char)(c)) || \
392         ((unsigned char)(c) >= 0xa0))
393 #define IsWPrint(wc) (iswprint(wc) || wc >= 0xa0)
394 #else
395 #define IsPrint(c) (isprint((unsigned char)(c)) || \
396         (option (OPTLOCALES) ? 0 : \
397         ((unsigned char)(c) >= 0xa0)))
398 #define IsWPrint(wc) (iswprint(wc) || \
399         (option (OPTLOCALES) ? 0 : (wc >= 0xa0)))
400 #endif
401
402 #define new_pattern() safe_calloc(1, sizeof (pattern_t))
403
404 int mutt_pattern_exec (struct pattern_t *pat, pattern_exec_flag flags, CONTEXT *ctx, HEADER *h);
405 pattern_t *mutt_pattern_comp (/* const */ char *s, int flags, BUFFER *err);
406 void mutt_check_simple (char *s, size_t len, const char *simple);
407 void mutt_pattern_free (pattern_t **pat);
408
409 /* ----------------------------------------------------------------------------
410  * Prototypes for broken systems
411  */
412
413 #ifdef HAVE_LONG_LONG_INT
414 #ifdef LONGLONG
415 #error LONGLONG is already defined
416 #endif
417 #define LONGLONG long long
418 #else
419 #define LONGLONG long
420 #endif
421
422 #ifdef HAVE_SRAND48
423 #define LRAND lrand48
424 #define SRAND srand48
425 #define DRAND drand48
426 #else
427 #define LRAND rand
428 #define SRAND srand
429 #define DRAND (double)rand
430 #endif /* HAVE_SRAND48 */
431
432 /* HP-UX, ConvexOS and UNIXware don't have this macro */
433 #ifndef S_ISLNK
434 #define S_ISLNK(x) (((x) & S_IFMT) == S_IFLNK ? 1 : 0)
435 #endif
436
437 int getdnsdomainname (char *, size_t);
438
439 /* According to SCO support, this is how to detect SCO */
440 #if defined (_M_UNIX) || defined (M_OS)
441 #define SCO
442 #endif
443
444 /* SCO Unix uses chsize() instead of ftruncate() */
445 #ifndef HAVE_FTRUNCATE
446 #define ftruncate chsize
447 #endif
448
449 #ifndef HAVE_SNPRINTF
450 extern int snprintf (char *, size_t, const char *, ...);
451 #endif
452
453 #ifndef HAVE_VSNPRINTF
454 extern int vsnprintf (char *, size_t, const char *, va_list);
455 #endif
456
457 #ifndef HAVE_STRERROR
458 #ifndef STDC_HEADERS
459 extern int sys_nerr;
460 extern char *sys_errlist[];
461 #endif
462
463 #define strerror(x) ((x) > 0 && (x) < sys_nerr) ? sys_errlist[(x)] : 0
464 #endif /* !HAVE_STRERROR */
465
466 #ifndef HAVE_MEMMOVE
467 #define memmove(d,s,n) bcopy((s),(d),(n))
468 #endif
469
470 /* AIX doesn't define these in any headers (sigh) */
471 int strcasecmp (const char *, const char *);
472 int strncasecmp (const char *, const char *, size_t);
473
474 #ifdef _AIX
475 int setegid (gid_t);
476 #endif /* _AIX */
477
478 #ifndef STDC_HEADERS
479 extern FILE *fdopen ();
480 extern int system ();
481 extern int puts ();
482 extern int fputs ();
483 extern int fputc ();
484 extern int fseek ();
485 extern char *strchr ();
486 extern int getopt ();
487 extern int fputs ();
488 extern int fputc ();
489 extern int fclose ();
490 extern int fprintf();
491 extern int printf ();
492 extern int fgetc ();
493 extern int tolower ();
494 extern int toupper ();
495 extern int sscanf ();
496 extern size_t fread ();
497 extern size_t fwrite ();
498 extern int system ();
499 extern int rename ();
500 extern time_t time ();
501 extern struct tm *localtime ();
502 extern char *asctime ();
503 extern char *strpbrk ();
504 extern int fflush ();
505 extern long lrand48 ();
506 extern void srand48 ();
507 extern time_t mktime ();
508 extern int vsprintf ();
509 extern int ungetc ();
510 extern char *mktemp ();
511 extern int ftruncate ();
512 extern void *memset ();
513 extern int pclose ();
514 extern int socket ();
515 extern int connect ();
516 extern size_t strftime ();
517 extern int lstat ();
518 extern void rewind ();
519 extern int readlink ();
520
521 /* IRIX barfs on empty var decls because the system include file uses elipsis
522    in the declaration.  So declare all the args to avoid compiler errors.  This
523    should be harmless on other systems.  */
524 int ioctl (int, int, ...);
525
526 #endif
527
528 /* unsorted */
529 void ci_bounce_message (HEADER *, int *);
530 int ci_send_message (int, HEADER *, char *, CONTEXT *, HEADER *);
531
532 /* prototypes for compatibility functions */
533
534 #ifndef HAVE_SETENV
535 int setenv (const char *, const char *, int);
536 #endif
537
538 #ifndef HAVE_STRCASECMP
539 int strcasecmp (char *, char *);
540 int strncasecmp (char *, char *, size_t);
541 #endif
542
543 #ifndef HAVE_STRDUP
544 char *strdup (const char *);
545 #endif
546
547 #ifndef HAVE_STRSEP
548 char *strsep (char **, const char *);
549 #endif
550
551 #ifndef HAVE_STRTOK_R
552 char *strtok_r (char *, const char *, char **);
553 #endif
554
555 #ifndef HAVE_WCSCASECMP
556 int wcscasecmp (const wchar_t *a, const wchar_t *b);
557 #endif
558
559 #ifndef HAVE_STRCASESTR
560 char *strcasestr (const char *, const char *);
561 #endif
562
563 #ifndef HAVE_MKDTEMP
564 char *mkdtemp (char *tmpl);
565 #endif