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