/* gui.c */
extern void gui_start __ARGS((void));
extern void gui_prepare __ARGS((int *argc, char **argv));
extern int gui_init_check __ARGS((void));
extern void gui_init __ARGS((void));
extern void gui_exit __ARGS((int rc));
extern void gui_shell_closed __ARGS((void));
extern int gui_init_font __ARGS((char_u *font_list, int fontset));
extern int gui_get_wide_font __ARGS((void));
extern void gui_set_cursor __ARGS((int row, int col));
extern void gui_update_cursor __ARGS((int force, int clear_selection));
extern void gui_position_menu __ARGS((void));
extern int gui_get_base_width __ARGS((void));
extern int gui_get_base_height __ARGS((void));
extern void gui_resize_shell __ARGS((int pixel_width, int pixel_height));
extern void gui_may_resize_shell __ARGS((void));
extern int gui_get_shellsize __ARGS((void));
extern void gui_set_shellsize __ARGS((int mustset, int fit_to_display, int direction));
extern void gui_new_shellsize __ARGS((void));
extern void gui_reset_scroll_region __ARGS((void));
extern void gui_start_highlight __ARGS((int mask));
extern void gui_stop_highlight __ARGS((int mask));
extern void gui_clear_block __ARGS((int row1, int col1, int row2, int col2));
extern void gui_update_cursor_later __ARGS((void));
extern void gui_write __ARGS((char_u *s, int len));
extern void gui_dont_update_cursor __ARGS((void));
extern void gui_can_update_cursor __ARGS((void));
extern int gui_outstr_nowrap __ARGS((char_u *s, int len, int flags, guicolor_T fg, guicolor_T bg, int back));
extern void gui_undraw_cursor __ARGS((void));
extern void gui_redraw __ARGS((int x, int y, int w, int h));
extern int gui_redraw_block __ARGS((int row1, int col1, int row2, int col2, int flags));
extern int gui_wait_for_chars __ARGS((long wtime));
extern void gui_send_mouse_event __ARGS((int button, int x, int y, int repeated_click, int_u modifiers));
extern int gui_xy2colrow __ARGS((int x, int y, int *colp));
extern void gui_menu_cb __ARGS((vimmenu_T *menu));
extern void gui_init_which_components __ARGS((char_u *oldval));
extern int gui_use_tabline __ARGS((void));
extern void gui_update_tabline __ARGS((void));
extern void get_tabline_label __ARGS((tabpage_T *tp, int tooltip));
extern int send_tabline_event __ARGS((int nr));
extern void send_tabline_menu_event __ARGS((int tabidx, int event));
extern void gui_remove_scrollbars __ARGS((void));
extern void gui_create_scrollbar __ARGS((scrollbar_T *sb, int type, win_T *wp));
extern scrollbar_T *gui_find_scrollbar __ARGS((long ident));
extern void gui_drag_scrollbar __ARGS((scrollbar_T *sb, long value, int still_dragging));
extern void gui_update_scrollbars __ARGS((int force));
extern int gui_do_scroll __ARGS((void));
extern int gui_do_horiz_scroll __ARGS((void));
extern void gui_check_colors __ARGS((void));
extern guicolor_T gui_get_color __ARGS((char_u *name));
extern int gui_get_lightness __ARGS((guicolor_T pixel));
extern void gui_new_scrollbar_colors __ARGS((void));
extern void gui_focus_change __ARGS((int in_focus));
extern void gui_mouse_moved __ARGS((int x, int y));
extern void gui_mouse_correct __ARGS((void));
extern void ex_gui __ARGS((exarg_T *eap));
extern int gui_find_bitmap __ARGS((char_u *name, char_u *buffer, char *ext));
extern void gui_find_iconfile __ARGS((char_u *name, char_u *buffer, char *ext));
extern void display_errors __ARGS((void));
extern int no_console_input __ARGS((void));
extern void gui_update_screen __ARGS((void));
extern char_u *get_find_dialog_text __ARGS((char_u *arg, int *wwordp, int *mcasep));
extern int gui_do_findrepl __ARGS((int flags, char_u *find_text, char_u *repl_text, int down));
extern void gui_handle_drop __ARGS((int x, int y, int_u modifiers, char_u **fnames, int count));
/* vim: set ft=c : */
