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