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