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