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