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