
#include "menu.h"



extern void set_colour(unsigned int colour,int fground,int action);
extern void set_focus(wimp_w w);
extern void dbox_menu(wimp_menustr *wmenu,void(*proc)(int *),wimp_mousestr *mouse);
extern int query(char *text, char *button);
extern int query2(char *text, char *button, char *button2);
extern int user_message(char *text);
extern void reopen_window(wimp_w w, int behind);
extern void dataopen(char *fname, int ftype);
extern void malloc_err(int number);
extern void err_internal(int number, int value);
extern BOOL help_handler(void *event, int id);
extern BOOL dbox_help_handler(dbox d, void *event, void *handle);
extern void xferrecv_wimpscrap(wimp_eventstr *e);


extern void set_caret_pos(TEXTR *t);

/* extern void make_boxes_menu(int control, menu *m); */

extern int pluto_run_options;
extern int pluto_run_options2;

extern char *pluto_path;
extern char pluto_articles[];
extern char *msg_not_implemented;


void visdelay_begin(void);
void visdelay_end(void);


// addr.c
extern void addrlist_add_email(char *address, int control);
extern void addrlist_add_entry(ADDR_BOOK2 *addr, int list);
extern void addrlist_open(int at_pointer);
extern void addrlist_select(int line, int selected);
extern int addr_list_lookup_name(char *name, int type, int ignore, int start);
extern int addr_list_lookup_count(char *name, menu m, int *addr_ix);
extern int addr_list_lookup(char *name);
extern int addr_list_lookup_menu(char *name);
extern ADDR_BOOK *addr_lookup_url2(char *url, int ignore);
extern ADDR_BOOK *addr_lookup_url(char *url);
extern char *addr_lookup(char *name);
extern void address_insert(TEXTR *t, dbox d, int field);
extern void save_addr_file(void);

// artfile.c
extern void article_delete_duplicates(void);
extern void article_file_compact_all(void);
extern void article_file_ensure_closed(int fileno);
extern int article_file_recover(int cf, int reason);
extern int article_files_repair(int cf, int all_files);
extern void article_file_ressurrect(int cf);
extern int article_file_set_references(void);
extern void artfile_statistics(int cf);
extern void article_files_search_fault(int start);

// article.c
extern int article_add(CARD *cptr, char **text_anchor, int text_start, int textsize);
extern int article_delete(FOLDREC *fr, CARD *cptr, int close, int resurrect);
extern int article_delete_internet_header(FOLDREC *fr, CARD *cptr, int quiet);
extern void article_file_close(void);
extern FILE *article_fopen(int cf, int fileno, char *access);
extern unsigned int *article_make_index(FOLDREC *fr, unsigned int **ixptr);
extern FILE *article_open_shortest(int box, int length, int omit);
extern int article_read(TEXTR *t, long int addr, int box, int offset, int length, int keep_buf, int upd_read, int quiet);
extern void article_read_file_headers(int cf);
extern void article_save_file_headers(int cf);
extern int article_update(FOLDREC *fr,CARD *cptr,char **text_anchor, int text_start, int text_length);
extern int box_to_cf(int box);
extern int cf_filenum(int cf,int filenum);
extern int cf_to_box(int cf);
extern int cptr_to_cf(CARD *cptr);
extern int decode_iso8859(char *string, int control);
extern int decode_quoted_printable(TEXTR *t, int start, int end);
extern char *get_reference(char **text, int start, int end, int which);
extern int get_time_stamp(char *fname);
extern void get_time_stamp2(char *fname, char *time_stamp);
extern void import_articles2(char *fname, int type, int box, int flags);
extern int interpret_article_key(char **text, int *startptr, int end, int *arg, int *arg_end);
extern void interpret_references(CARD_EXPANDED *cardex, char **text, ARTICLE_IN *art_in);
extern void interpret_sender(char **text, int argument, int length, char *out, int max_length, int *daemon);
extern CARD *load_article(char *fname, int filetype, int action, int box, char *comment, int user);
extern int lookup_mnem(MNEM_TAB *mnemtab, char *string);

// attach.c
extern void attach_create(TEXTR *t, char *fname, char *attach_name, int ftype);
extern void attach_window_handler(wimp_eventstr *e, void *handle);
extern void attachments_extend(TEXTR *t, int increase);
extern BOOL attachment_save(char *filename,TEXTR *t,int a_ix);
extern int get_ftype_from_extension(char *name);
extern void list_export_multipart(FOLDREC *fr, int from_menu);
extern int text_mime_content_type(TEXTR *t,int a, int displ, int end);
extern char *uudecode_line(char **anchor, int *offset, int *length, int encoding);
extern int uuencode_file(int length, FILE *f, char **base, int displ);
extern int uuencode_length(int length);

// box.c
extern char *category_name(FOLDREC *fr,int cat);
extern void blist_close(BLIST *b);
extern void blist_drag_continue(BLIST *b, int open, wimp_wstate *wstate, wimp_wstate *wstate1, wimp_mousestr *m);
extern void blist_menu_deleted(int menuptr);
extern void blist_register(BLIST *b,int type,char *templ);
extern void blist_save_data(BLIST *b,char *fname);
extern void blist_set_extent(BLIST *b,int open);
extern void box_bin_hide(void);
extern void box_close_external(int box);
extern void box_close_all_external(void);
extern int box_lookup_number(int number);
extern int box_password_check(int box, int ask);
extern int box_save_external(int box, int articles);
extern void box_set_postedlist_icon(int waiting, int held);
extern int boxes_unread_inc(int box,int count);
extern int boxlist_adjust_count(int box, int adjust, int status);
extern void boxlist_click_open(int full_size);
extern void boxlist_recalc(void);
extern void boxlist_set_positions(void);
extern void boxlist_toggle_hidden(void);
extern char *get_box_name(int boxno);
extern char *get_box_name2(int box, int type);
extern int get_box_number(char *name);
extern int load_boxes_file(void);
extern void make_boxes_list2(void);
extern void make_boxes_menu(int control, menu *menuptr);
extern void mbox_open(int open);
extern NEWSG *newsg_lookup(char *name);
extern NEWSG *newsg_lookup2(char *name);
extern wimp_menustr *newsg_make_menu(int type);
extern char *newsg_menu_name(int hit, NEWSG **ng_out);
extern void print_justify(int x, int y, int width, int value);
extern void redraw_blist(BLIST *b);
extern void redraw_blist_line(BLIST *b,int line);
extern void redraw_boxes_list(int box);
extern void save_boxes_file(void);
extern void set_boxlist_extent(int open);
extern int source_to_user(int source);

// cards.c
extern void article_view2(FOLDREC *fr, int ref, CARD *cptr);
extern void card_add_binned_list(CARD *cptr);
extern int card_add_category(TEXTR *textr_cats, int cat);
extern void card_binned_selected(int *hits);
extern void card_changed_status(CARD *cptr);
extern int card_check_changed(TEXTR *t);
extern int card_edit(TEXTR *t, FOLDREC *fr, CARD *cptr, int action, int ref);
extern int card_identify_cat(TEXTR *t, int index, int action);
extern int card_mail_type(CARD_EXPANDED *cardex, char *source_name);
extern void card_make_binned_menu(FOLDREC *fr);
extern int card_open_next(FOLDREC *fr, int control,int open,int deleted);
extern void card_remove_fetching_status(CARD_EXPANDED *cardex);
extern void card_set_read(FOLDREC *fr);
extern int card_size(CARD *cptr);
extern void cardfile_autosave(int time, void *handle);
extern void cardfile_autosave_set(int cf);
extern CARD *cardfile_add(CARD_EXPANDED *cardex);
extern CARD *cardfile_cptr(FOLDREC *fr, int ix);
extern int cardfile_load(int cf);
extern void cardfile_new_to_unread(int control);
extern int cardfile_remove(TEXTR *t, CARD *cptr, int box);
extern void cardfile_remove3(FOLDREC *fr, CARD *cptr);
extern int cardfile_save(int cf, int multiprocess);
extern void cardfile_update(FOLDREC *fr, TEXTR *t, CARD_EXPANDED *cardex, int redraw);
extern int check_lock_lists(int flags);
extern void clear_ixlist(FOLDREC *fr);
extern void clear_lock_lists(int reason);
extern void set_lock_lists(int reason, FOLDREC *fr);
extern void close_all_list_windows(int cf);
extern void crosspost_remove(FOLDREC *fr, CARD *cptr1, int action);
extern int date_addition(int date, int days);
extern char *decode_date(int date,int timeflag);
extern int decode_month(int date);
extern int date_subtract(int date1, int date2);
extern void encode_cats(CARD_EXPANDED *cardex, char *string);
extern int encode_date(char *string, int control);
extern int encode_source_name(char *string);
extern char *expand_cats(CARD_EXPANDED *cardex);
extern char *expand_source(int source, int explan);
extern char *get_current_date_string(int *date_enc);
extern int get_today_date(void);
extern int get_today_date2(char *out);
extern void iconise_aviewer(int window);
extern int interpret_date(char *string);
extern void init_cardex(CARD_EXPANDED *cardex);
extern CARD *interpret_file(char *fname, int filetype, int action, int box, char *comment, int start1,
               int text_length, CARD_EXPANDED *parent, int set_user);
extern void list_close_all(FOLDREC *fr, int show);
extern void list_close_level(FOLDREC *fr);
extern void list_delete_window(FOLDREC *fr);
extern void list_deselect(FOLDREC *fr,int linenum);
extern void list_drag_continue(FOLDREC *fr, int open, wimp_wstate *wstate, wimp_wstate *wstate1, wimp_mousestr *m);
extern CARD *list_enumerate_next(FOLDREC *fr, unsigned int *ixlist);
extern void list_enumerate_start(FOLDREC *fr);
extern int list_get_linenum(wimp_w window);
extern void list_open_at(FOLDREC *fr, int card, int card_viewer);
extern void list_open_window_all(int open);
extern int list_set_colour(int colr, int not_selected,int x, int y);
extern void list_set_title(FOLDREC *fr);
extern void list_sort(FOLDREC *fr, int show);
extern void load_box_any_read(void);
extern int pack_card(CARD *cp, CARD_EXPANDED *cardex);
extern void redraw_list_lines(FOLDREC *fr,int linenum);
extern void save_box_any_read(void);
extern void set_card_height(TEXTR *t, CARD_EXPANDED *cardex,int height);
extern void skip_thread(FOLDREC *fr, int action);
extern FOLDREC *subset_new(char *name,FOLDREC *parent,int count);
extern void unpack_card(CARD *cp, CARD_EXPANDED *cardex);

// cats.h
extern int category_add_child(FOLDREC *fr, const char* name, const char *parent_name, int *ref_out, int cat_preferred);
extern wimp_menustr *category_make_menu(FOLDREC *fr, int control);
extern int category_menu_hit(int *hits, char **cat_name);
extern void category_remove(FOLDREC *fr, int child,int ref, int level);
extern void category_change_name(FOLDREC *fr, int cat, char *name, char *comment);
extern void category_sort(FOLDREC *fr, int parent);
extern void category_unlink(FOLDREC *fr,int ref);
extern int category_alloc(FOLDREC *fr, int new_ref);
extern void category_link(FOLDREC *fr, int cat, int child, int link_from, int level);
extern int category_lookup(FOLDREC *fr, const char *name, int check);
extern void category_add_chars(FOLDREC *fr, char *name, unsigned short *index);
extern void category_add_mail_name(char *name, int save);
extern void category_set_positions(FOLDREC *fr);
extern void expand_cat_string(short *cats, int n_cats, char *buf, int n_buf);
extern void redraw_cats_lines(FOLDREC *fr, int linenum);
extern void save_catfile(FOLDREC *fr, int reload);
extern void set_cats_extent(FOLDREC *fr,int open);
extern int fold2_vector_to_ref(FOLDREC *fr, int *vector, int n_levels);
extern int fold2_count_level(FOLDREC *fr, int ix, int level);
extern int fold2_next_right(FOLDREC *fr, int ix, int level);
extern int fold2_next_down(FOLDREC *fr, int ix, int level);

// dbox.c
extern dbox dbox_new(char *name);
extern int dbox_widthfield(dbox d, dbox_field f);
extern wimp_icon *dbox__fieldtoiconptr(dbox d, dbox_field f);
extern wimp_i dbox__fieldtoicon(dbox_field f);

// debatch.c
extern void auto_debatch(int time, void *handle);
extern unsigned int disc_free_space(char *fname);
extern int debatch_file(char *path, int type, int box, int action_flags, char *stamp);
extern void posted_cache_delete(char *fname);
extern CARD *posted_find_article(char *id);
extern void posted_make_list(int open);
extern void postedlist_reopen(void);
extern int read_raw_news(int control, int announce);

// display.c
extern void display_icon(int status, int x, int y, int control);
extern void display_line(FOLDREC *fr, int x, int y, CARD *cp, int level, int ix, wimp_redrawstr *r, int reverse, int colr, int colr2);
extern int font_find_variant(char *fontname, int charset, int width, int height);
extern void index_diff_levels_expire(FOLDREC *fr);
extern void paint_string(char *string, int x, int y, int width);
extern void sort_for_duplicates(FOLDREC *fr);
extern void sort_index_list(FOLDREC *fr, int start_line);
extern void strcpy_printable(char *s1,char *s2, int n);

// export.c
extern void list_export_articles(FOLDREC *fr, int from_menu);
extern void save_text(TEXTR *t, int from_menu);
extern void save_url(TEXTR *t, char *url);
extern void set_filetype_icon(dbox d, int icon, int filetype);

// extra.c
extern char *addr_lookup(char *name);
extern int article_killfile(CARD_EXPANDED *cardex, char **text, int action, ARTICLE_IN *art_in);
extern int fetch_full(FOLDREC *fr, CARD *cptr, int cancel);
extern void killfile_free_regex(void);
extern void mail_list_server(CARD_EXPANDED *cardex, int user);

// filters.c
extern void filter_select(int line, int selected);
extern int killfile_count_cats(int type, int cat, int new_cat);
extern void list_killfile_add(FOLDREC *fr);
extern void regex_load(void);
extern void text_killfile_add(TEXTR *t, int type);

// fold.c
extern int fold_line_to_ref(FOLDREC *fr, int line, int *level, int *vector_out);
extern int fold_next(FOLDREC *fr, int ix, int *level);
extern int fold_n_lines(FOLDREC *fr, int level);
extern int fold_count_at_level(FOLDREC *fr, int ix, int level, int *end_ix);
extern int fold_count_level(FOLDREC *fr, int ix, int level);
extern int fold_linenum_open(FOLDREC *fr, int level);
extern void fold_remove_ref(FOLDREC *fr, int ref);
extern int fold_ref_to_line(FOLDREC *fr, int ref, int level);
extern void fold_ref_to_vector(FOLDREC *fr, int ref, int level, int *vector);
extern int fold_vector_to_line(FOLDREC *fr, int *vector, int level);
extern void fold_open_at_vector(FOLDREC *fr, int *vector, int level);
extern void fold_open_at_line(FOLDREC *fr, int line);
extern void fold_close_level(FOLDREC *fr, int level);
extern int fold_linenum_open(FOLDREC *fr, int level);
extern int fold_is_line_open(FOLDREC *fr, int line);
extern int fold_vector_to_ref(FOLDREC *fr, int *vector, int n_levels);

// import.c
extern void import_cats_file(char *filename, int filetype);

// jsdoslib.c
extern os_error *bbc_rectanglefill(int x, int y, int width, int height);

// listedit.c
extern void expire_articles(int start);
extern int list_export_menu_proc(FOLDREC *fr, char *hit);
extern void list_remove_attachments(FOLDREC *fr);
extern void list_set_category(FOLDREC *fr, int action);
extern void list_set_source(FOLDREC *fr, int control);
extern void list_set_status(FOLDREC *fr, int status);
extern void list_set_subject(FOLDREC *fr, int control);
extern void list_status_menu_proc(FOLDREC *fr, char *hit);

// lists.c
extern int article_check_integrity(int cf);
extern void box_new(void);
extern int box_password_ask(int box, ART_FILE_HEADER *header2);
extern void boxes_edit(int box);
extern void boxlist_import(char *filename, int filetype);
extern void boxlist_shift(BLIST *b, int direction);
extern void cardfile_free(int cf);
extern void dbox_boxes_show(int boxno);
extern void make_mbox_list(void);
extern void mboxlist_click_buttons(BLIST *b, wimp_eventdata *d);
extern void mboxlist_click_window(BLIST *b,int linenum,int bbits);
extern void mboxlist_key_window(BLIST *b,wimp_eventdata *d);
extern void mboxlist_menu_proc(void *handle, char *hits);

// menu.c
extern void menu_setcolour(menu m, int entry, int wimpcolr);

// newsg.c
extern void newsg_load(int control);
extern void newsg_save(int type);
extern void newsg_select(BLIST *b, int line, int selected);

// options.c
extern int check_domain(char *domain);
extern void check_multiple_domains(void);
extern wimp_menustr *make_font_menu(int sys_font);
extern void mbox_edit(int mbox);
extern void options_display_reload(char *fname);
extern int options_load(void);
extern void options_save(void);
extern int speak_load(void);

// optionsB.c
extern void dbox_mail_provider_selected(int *hits);
extern void dbox_news_provider_selected(int *hits);

// oslib.c
extern os_error *bbc_draw(int x,int y);
extern os_error *bbc_move(int x,int y);

// pgp.c
extern void pgp_clear_password(void);
extern void pgp_click_buttons(BLIST *b, wimp_eventdata *d);
extern void pgp_click_window(BLIST *b,int linenum,int bbits);
extern void pgp_decode(TEXTR *t);
extern void pgp_display_window(BLIST *b,wimp_redrawstr *r,int line,int end_line,int x,int y);
extern int pgp_encrypt(TEXTR *t);
extern int pgp_end_text(FILE **f_out, int action, OPTIONS_MAILBOX *user);
extern void pgp_import(char *filename, int filetype);
extern void pgp_key_window(BLIST *b,wimp_eventdata *d);
extern void pgp_load_aliases(void);
extern char *pgp_lookup_alias(char *addr);
extern FILE *pgp_open_list(void);
extern int pgp_start_text(FILE **f_out, int action);
extern void pgp_view_report(void);
extern void pgp_list_keys(int control);

//print.c
extern void print_text_dialog(TEXTR *t,CARD_EXPANDED *cardex, int from_menu);
extern void terminate_print(void);

// reply.c
extern int bounce_article(char **anchor, int start, int length, int user_number, int type, int log_box);
extern int bounce_article2(TEXTR *t, CARD *cptr, int user_number, int type, int log);
extern void bounce_messages(FOLDREC *fr, CARD *card_ptr);
extern char *cc_list_name(TEXTR *t, char *type);
extern int check_ramfs(void);
extern void copy_url_param(char *out, char *param, int len);
extern void edit_reply(TEXTR *t_in, int action);
extern void fade_ext_edit(wimp_w w, int fade);
extern char *get_sig_name(int count, char *name);
extern int get_quote_string_length(char *start,int *blanks);
extern void get_url_parameters(ARTICLE_OUT *art_out, char *url, char *param, char *body);
extern char *get_user_domain(OPTIONS_MAILBOX *user);
extern char *get_user_id(OPTIONS_MAILBOX *user);
extern char *get_user_id2(int user_num);
extern char *get_user_id3(int user_num);
extern char *make_legal_fname(char *user_id);
extern wimp_menustr *make_users_menu(int none);
extern int OLE_start(char *fname, int ftype, int type, int window, int attempt, void *handle);
extern void posted_make_list(int open);
extern void posted_open_list(void);
extern int posted_read_titles(int type, int base, POSTED_LIST *list);
extern void postedlist_init(void);
extern void postedlist_select(int line,int selected);
extern void reply_add_to_field(dbox d,int field,char *name);
extern void reply_addrbook_sig(TEXTR *t, ADDR_BOOK *a);
extern int reply_check_changed(TEXTR *t);
extern void reply_close(TEXTR *t);
extern TEXTR *reply_data_find(int control);
extern void reply_dbox_close(void);
extern int reply_destinations(char *dest, OPTIONS_MAILBOX *user, int control);
extern char *reply_extract_email_addr(char *buf, int control);
extern void reply_post_message(TEXTR *t);
extern int reply_receipt_ack(CARD_EXPANDED *cardex, char *addr, int user, int type);
extern void reply_save_draft(TEXTR *t, int temporary);
extern void reply_set_card_fields(TEXTR *t);
extern void reply_set_ext_edit(TEXTR *t, int redraw);
extern void reply_set_status(FOLDREC *fr, CARD *cptr);
extern void reply_show_user_id(TEXTR *t);
extern int reply_start_OLE(TEXTR *t);
extern wimp_menustr *sigs_make_menu(int type, char *first);
extern void text_fade_buttons(TEXTR *t);
extern void text_data_free(TEXTR *t);
extern TEXTR *text_data_init(int size, int type);
extern int text_record_check(TEXTR *t);
extern int text_record_check_changed(void);
extern void user_select(TEXTR *t, int user_no, int temp);
extern int validate_email_addr(char *addr);

// replystart.c
extern TEXTR *new_reply(FOLDREC *fr, char *email_addr, char *newsgroups, FOLDREC *parent, int usernum, char *sig);

// search.h
extern int  search_regex_flag;
extern char search_text_string[128];
extern char search_text_string_open[128];
extern void subset_dialogue(FOLDREC *fr, int type);
extern void subset_expand_level(FOLDREC *fr, int ref, int level);

// setup.c
extern void change_display_mode(OPTIONS_DISPLAY *d, int redraw);
extern void change_display_mode2(void);
extern void display_called(int hit,FOLDREC *fr,int edit);
extern void display_options_load(void);
extern void init_display_edit(void);
extern void init_sprites(void);

// speak.c
extern void announce_message(char *string, int level);
extern void options_speak(void);
extern void set_scroll_as_you_speak(TEXTR *t, int value);
extern void speak_set_params(int speed,int volume);
extern void speak_string(char *string);
extern void speak_stop(TEXTR *t);
extern void speak_text_continue(void);
extern void speak_word(TEXTR *t, int index);
extern void toggle_speak(TEXTR *t, int state);

// spell.c
extern void close_spell_window(TEXTR *t);
extern void spell_invoke(TEXTR *t);
extern void spell_load_attempt(void);
extern int spell_lookup(TEXTR *t, int index);
extern int spell_replace(TEXTR *t, char *word, int start, int end);
extern void spell_set_word(TEXTR *t, int index, int open);
extern void spell_show(TEXTR *t);
extern void spelldict_edit(char *fname);
extern char *userdict_lookup(char *word);

// text.c
extern void attach_set_sprite(TEXTR *t, int ix, int ftype);
extern void calc_line_tab(TEXTR *t);
extern void clipboard_copy_data(char **anchor, int start, int length);
extern void drag_complete(void);
extern void drag_continue(void);
extern void drag_start(wimp_mousestr *m,int type, void *handle, wimp_w window);
extern void paste_clipboard_dbox(dbox d, int field);
extern int close_article_window(TEXTR *t);
extern void dbox_text_corner(TEXTR *t, dbox d);
extern int index_to_linestart(TEXTR *t, int index, int *line_out);
extern void init_dbox_card(TEXTR *t);
extern int is_quoted_text(char *p);
extern int key_text_window1(int c, TEXTR *t);
extern int line_to_warea(int this_line,int height);
extern void mark_changed(TEXTR *t);
extern void move_up(TEXTR *t, int start, int by);
extern int move_down(TEXTR *t, int start, int by);
extern void open_article(TEXTR *t, int control);
extern void open_card_window(wimp_openstr *o, TEXTR *t);
extern int recalc_line_tab(TEXTR *t, int start_line, int chars_added);
extern void redraw_text_lines(TEXTR *t, int linenum, int endline);
extern void set_text_extent(TEXTR *t);
extern void show_attachment_icons(TEXTR *t);
extern void text_allow_edit(TEXTR *t);
extern void text_autosave(int time, void *handle);
extern void text_autosave2(TEXTR *t);
extern void text_character_delete(TEXTR *t);
extern void text_close_window(TEXTR *t);
extern void text_display_change(OPTIONS_DISPLAY *d,int redraw);
extern int text_find_sig(char *start, int length);
extern int text_find_string_next(TEXTR *t, char *string, int case_sensitive, int regex_flag);
extern void text_format_text(TEXTR *t);
extern void text_highlight_cursor_word(TEXTR *t);
extern void text_interpret_article(TEXTR *t, CARD_EXPANDED *cardex, int display);
extern menu text_menu_maker(void *handle);
extern void text_menu_proc(void *handle, char *hit);
extern int text_read_article(TEXTR *t, CARD_EXPANDED *cardex, int addr, int offset, int length, int display, int allow_edit);
extern void text_recalc_delete(TEXTR *t, int start_index, int chars_added);
extern void text_reopen(TEXTR *t);
extern void text_reset_header_order(TEXTR *t);
extern void text_save_article(TEXTR *t_in);
extern void text_set_colours(void);
extern void text_show_status(TEXTR *t);
extern void text_show_status2(CARD *cptr);
extern void text_window_close(TEXTR *t);
extern void text_window_handler(wimp_eventstr *e, void *handle);
extern int warea_to_line(TEXTR *t, int wa_y, int *y_out, int *index_out, int height);

// thread.c
extern void msgid_list_parents(TEXTR *t);
extern CARD *msgid_lookup(unsigned int msgid, CARD *cptr_ref, int control);
extern void thread_sort(FOLDREC *fr, int start, int offset);
extern void sort_msgids(void);
extern int check_fetch_list(char *message_id);
extern void free_fetch_list(int news_count,char *time_stamp);
extern void load_fetch_list(void);
extern void thread_change_offset(FOLDREC *fr, int shift);

// utility.c
extern void copy_unfold(char *out,int max,char *src, int length);
extern void file_delete(char *path);
extern char *get_message_id(int add_name, int type);
extern char *get_temp_fname(void);
extern unsigned int gethash32(char *string);
extern int hexdig(int c);
extern int memcmp_lc(char *p1, char *p2, int n);
extern int memcmp_lc2(char *p1, char *p2, int n);
extern int read_hex(char *p);
extern int search_string(char *string, int length, char **anchor, int from, int len, int case_sensitive);
extern int strcmp_lc(char *s1, char *s2);
extern void string_lc(char *string);
extern void strcpy_lc(char *dest, char *string);
extern void strncpy0(char *dest, char *src, int len);
extern void beep(void);
extern void visdelay2_begin(void);
extern void visdelay2_end(void);
extern void visdelay2_percent(int percentage);
extern void visdelay2_enter(void);
extern void visdelay2_leave(void);

// wimp.c
extern void null_events(int type, int on);
extern void call_event_process(int count);
extern void pluto_wimp_message(int control, int control2, char *data);
extern void set_icon_state(wimp_w w, int icon, int state);
extern void set_focus(wimp_w w);
extern int scroll_to_y(wimp_w w, int y);
extern int scroll_to_y2(wimp_w w,int y1, int y2);
extern void scroll_window(wimp_eventdata *d);
extern int scroll_page(wimp_w w, int up);
extern void scroll_to_top(wimp_w w, int up);
extern void set_dbox_at_pointer(dbox d);
extern int read_os_variable(char *name,char *output,int max_length);
extern FILE *fopen_werr(char *path,char *access, char *name);
extern FILE *fopen_werr_pluto(char *path,char *access, char *name);
extern FILE *fopen_pluto(char *path,char *access);
extern int fwrite_werr(void *p, int size, int num, FILE *f);
extern os_error *file_move(char *from, char *to);
extern os_error *file_copy(char *from, char *to);
extern int get_filelength(char *fname);
extern int get_filetype(char *fname);
extern void set_filetype(char *filename, int ftype);
extern void file_ensure_exists(char *fname);
extern void strcpy_no_accents(char *dest, char *string);
extern void qsortG(void *base, size_t nmemb, size_t size, int (*compare)(const void *, const void *));
extern int dbox_range_check(int value, int lower, int upper);
extern int query3(char *text, char *button, char *button2, char *button3);
extern int query_dcs(char *text);
extern int pointer_sanity_check(int number, void *ptr);
extern void err_please_run(char *app);
extern void malloc_err_string(int number, char *string);
extern int read_os_variable2(char *name,char *output,int max_length);
extern void dbox_hidefield (dbox d, dbox_field f);
extern void wimp_hide_window(wimp_w w);
extern void set_input_focus(wimp_w w, int icon, int index);
extern void pass_url_to_browser(char *url);
extern int preserve_iconbar(void);
extern void set_os_variable(char *name, char *value);
extern void attach_menu1(int on);
extern int check_mode(void);
extern int search_regex(char *string, int length, char **anchor, int from, int len,
                                                    int case_sensitive, int regex, int *found_len);
extern int search_regex_compile(char *string, int case_sensitive);
extern int get_button_state(wimp_w w, int icon);
extern void set_button_state(wimp_w w, int icon, int state, int flag);
extern void icon_set_caret_pos(wimp_w w, int field, int end);
extern int is_keypressed(int key);
extern int scroll_by_y(wimp_w w, int by);
extern void dirlist_open(char *path,char *flags);
extern void *malloc_dont_budge(int size);
extern char *wimpscrap_check(char *filename);
extern void wimpscrap_check_clear(void);
extern void dbox_fade_list(dbox d, char *list, int fade);
extern char *get_leaf_name(char *fname);
extern void icon_load_handler(wimp_eventstr *e, void *handle);
extern void proc_iconclick(wimp_i icon);
extern BOOL unknown_event_handler(wimp_eventstr *e, void *handle);

extern int akbd_pollsh(void);

// xfersend.h
extern BOOL xfersend__unknowns(wimp_eventstr *e, void *handle);


// assembler
extern int get_hash9(char *word);
extern int box_selector_1(int box, unsigned int *ixlist, int n_entries);  /* assembler */
extern int box_sorter2(const void *a1, const void *a2);   /* assembler */
extern int article_sorter(const void *a1, const void *a2);   /* assembler */
extern void move_down_1(char *ptr, int n_bytes);
extern void move_up_1(char *ptr, int n_bytes);
