/* ui.c */
extern void ui_write __ARGS((char_u *s, int len));
extern void ui_inchar_undo __ARGS((char_u *s, int len));
extern int ui_inchar __ARGS((char_u *buf, int maxlen, long wtime, int tb_change_cnt));
extern int ui_char_avail __ARGS((void));
extern void ui_delay __ARGS((long msec, int ignoreinput));
extern void ui_suspend __ARGS((void));
extern void suspend_shell __ARGS((void));
extern int ui_get_shellsize __ARGS((void));
extern void ui_set_shellsize __ARGS((int mustset));
extern void ui_new_shellsize __ARGS((void));
extern void ui_breakcheck __ARGS((void));
extern void clip_init __ARGS((int can_use));
extern void clip_update_selection __ARGS((void));
extern void clip_own_selection __ARGS((VimClipboard *cbd));
extern void clip_lose_selection __ARGS((VimClipboard *cbd));
extern void clip_copy_selection __ARGS((void));
extern void clip_auto_select __ARGS((void));
extern int clip_isautosel __ARGS((void));
extern void clip_modeless __ARGS((int button, int is_click, int is_drag));
extern void clip_start_selection __ARGS((int col, int row, int repeated_click));
extern void clip_process_selection __ARGS((int button, int col, int row, int_u repeated_click));
extern void clip_may_redraw_selection __ARGS((int row, int col, int len));
extern void clip_clear_selection __ARGS((void));
extern void clip_may_clear_selection __ARGS((int row1, int row2));
extern void clip_scroll_selection __ARGS((int rows));
extern void clip_copy_modeless_selection __ARGS((int both));
extern int clip_gen_own_selection __ARGS((VimClipboard *cbd));
extern void clip_gen_lose_selection __ARGS((VimClipboard *cbd));
extern void clip_gen_set_selection __ARGS((VimClipboard *cbd));
extern void clip_gen_request_selection __ARGS((VimClipboard *cbd));
extern int vim_is_input_buf_full __ARGS((void));
extern int vim_is_input_buf_empty __ARGS((void));
extern int vim_free_in_input_buf __ARGS((void));
extern int vim_used_in_input_buf __ARGS((void));
extern char_u *get_input_buf __ARGS((void));
extern void set_input_buf __ARGS((char_u *p));
extern void add_to_input_buf __ARGS((char_u *s, int len));
extern void add_to_input_buf_csi __ARGS((char_u *str, int len));
extern void push_raw_key __ARGS((char_u *s, int len));
extern void trash_input_buf __ARGS((void));
extern int read_from_input_buf __ARGS((char_u *buf, long maxlen));
extern void fill_input_buf __ARGS((int exit_on_error));
extern void read_error_exit __ARGS((void));
extern void ui_cursor_shape __ARGS((void));
extern int check_col __ARGS((int col));
extern int check_row __ARGS((int row));
extern void open_app_context __ARGS((void));
extern void x11_setup_atoms __ARGS((Display *dpy));
extern void clip_x11_request_selection __ARGS((Widget myShell, Display *dpy, VimClipboard *cbd));
extern void clip_x11_lose_selection __ARGS((Widget myShell, VimClipboard *cbd));
extern int clip_x11_own_selection __ARGS((Widget myShell, VimClipboard *cbd));
extern void clip_x11_set_selection __ARGS((VimClipboard *cbd));
extern int jump_to_mouse __ARGS((int flags, int *inclusive, int which_button));
extern int mouse_comp_pos __ARGS((win_T *win, int *rowp, int *colp, linenr_T *lnump));
extern win_T *mouse_find_win __ARGS((int *rowp, int *colp));
extern int get_fpos_of_mouse __ARGS((pos_T *mpos));
extern int vcol2col __ARGS((win_T *wp, linenr_T lnum, int vcol));
extern void ui_focus_change __ARGS((int in_focus));
extern void im_save_status __ARGS((long *psave));
/* vim: set ft=c : */
