/* gui_photon.c */
void gui_ph_encoding_changed(int new_encoding);
void gui_mch_prepare(int *argc, char **argv);
int gui_mch_init(void);
int gui_mch_init_check(void);
int gui_mch_open(void);
void gui_mch_exit(int rc);
void gui_mch_update(void);
int gui_mch_wait_for_chars(int wtime);
char_u *gui_mch_browse(int saving, char_u *title, char_u *default_name, char_u *ext, char_u *initdir, char_u *filter);
int gui_mch_dialog(int type, char_u *title, char_u *message, char_u *buttons, int default_button, char_u *textfield, int ex_cmd);
int gui_mch_get_winpos(int *x, int *y);
void gui_mch_set_winpos(int x, int y);
void gui_mch_set_shellsize(int width, int height, int min_width, int min_height, int base_width, int base_height, int direction);
void gui_mch_get_screen_dimensions(int *screen_w, int *screen_h);
void gui_mch_iconify(void);
void gui_mch_set_foreground(void);
void gui_mch_settitle(char_u *title, char_u *icon);
void gui_mch_set_scrollbar_thumb(scrollbar_T *sb, int val, int size, int max);
void gui_mch_set_scrollbar_pos(scrollbar_T *sb, int x, int y, int w, int h);
void gui_mch_create_scrollbar(scrollbar_T *sb, int orient);
void gui_mch_enable_scrollbar(scrollbar_T *sb, int flag);
void gui_mch_destroy_scrollbar(scrollbar_T *sb);
void mch_set_mouse_shape(int shape);
void gui_mch_mousehide(int hide);
void gui_mch_getmouse(int *x, int *y);
void gui_mch_setmouse(int x, int y);
guicolor_T gui_mch_get_rgb(guicolor_T pixel);
void gui_mch_new_colors(void);
guicolor_T gui_mch_get_color(char_u *name);
void gui_mch_set_fg_color(guicolor_T color);
void gui_mch_set_bg_color(guicolor_T color);
void gui_mch_set_sp_color(guicolor_T color);
void gui_mch_invert_rectangle(int row, int col, int nr, int nc);
void gui_mch_clear_block(int row1, int col1, int row2, int col2);
void gui_mch_clear_all(void);
void gui_mch_delete_lines(int row, int num_lines);
void gui_mch_insert_lines(int row, int num_lines);
void gui_mch_draw_string(int row, int col, char_u *s, int len, int flags);
void gui_mch_draw_hollow_cursor(guicolor_T color);
void gui_mch_draw_part_cursor(int w, int h, guicolor_T color);
int gui_mch_is_blinking(void);
int gui_mch_is_blink_off(void);
void gui_mch_set_blinking(long wait, long on, long off);
void gui_mch_start_blink(void);
void gui_mch_stop_blink(void);
void gui_mch_beep(void);
void gui_mch_flash(int msec);
void gui_mch_flush(void);
void gui_mch_set_text_area_pos(int x, int y, int w, int h);
int gui_mch_haskey(char_u *name);
void gui_mch_enable_menu(int flag);
void gui_mch_set_menu_pos(int x, int y, int w, int h);
void gui_mch_add_menu(vimmenu_T *menu, int index);
void gui_mch_add_menu_item(vimmenu_T *menu, int index);
void gui_mch_destroy_menu(vimmenu_T *menu);
void gui_mch_menu_grey(vimmenu_T *menu, int grey);
void gui_mch_menu_hidden(vimmenu_T *menu, int hidden);
void gui_mch_draw_menubar(void);
void gui_mch_show_popupmenu(vimmenu_T *menu);
void gui_mch_toggle_tearoffs(int enable);
void gui_mch_show_toolbar(int showit);
int gui_mch_init_font(char_u *vim_font_name, int fontset);
int gui_mch_adjust_charheight(void);
GuiFont gui_mch_get_font(char_u *vim_font_name, int report_error);
char_u *gui_mch_get_fontname(GuiFont font, char_u *name);
void gui_mch_set_font(GuiFont font);
void gui_mch_free_font(GuiFont font);
/* vim: set ft=c : */
