/* screen.c */
extern void redraw_later __ARGS((int type));
extern void redraw_win_later __ARGS((win_T *wp, int type));
extern void redraw_later_clear __ARGS((void));
extern void redraw_all_later __ARGS((int type));
extern void redraw_curbuf_later __ARGS((int type));
extern void redraw_buf_later __ARGS((buf_T *buf, int type));
extern void redrawWinline __ARGS((linenr_T lnum, int invalid));
extern void update_curbuf __ARGS((int type));
extern void update_screen __ARGS((int type));
extern void update_debug_sign __ARGS((buf_T *buf, linenr_T lnum));
extern void updateWindow __ARGS((win_T *wp));
extern void rl_mirror __ARGS((char_u *str));
extern void status_redraw_all __ARGS((void));
extern void status_redraw_curbuf __ARGS((void));
extern void redraw_statuslines __ARGS((void));
extern void win_redraw_last_status __ARGS((frame_T *frp));
extern void win_redr_status_matches __ARGS((expand_T *xp, int num_matches, char_u **matches, int match, int showtail));
extern void win_redr_status __ARGS((win_T *wp));
extern int stl_connected __ARGS((win_T *wp));
extern int get_keymap_str __ARGS((win_T *wp, char_u *buf, int len));
extern void screen_putchar __ARGS((int c, int row, int col, int attr));
extern void screen_getbytes __ARGS((int row, int col, char_u *bytes, int *attrp));
extern void screen_puts __ARGS((char_u *text, int row, int col, int attr));
extern void screen_puts_len __ARGS((char_u *text, int len, int row, int col, int attr));
extern void screen_stop_highlight __ARGS((void));
extern void reset_cterm_colors __ARGS((void));
extern void screen_draw_rectangle __ARGS((int row, int col, int height, int width, int invert));
extern void screen_fill __ARGS((int start_row, int end_row, int start_col, int end_col, int c1, int c2, int attr));
extern void check_for_delay __ARGS((int check_msg_scroll));
extern int screen_valid __ARGS((int clear));
extern void screenalloc __ARGS((int clear));
extern void free_screenlines __ARGS((void));
extern void screenclear __ARGS((void));
extern int can_clear __ARGS((char_u *p));
extern void screen_start __ARGS((void));
extern void windgoto __ARGS((int row, int col));
extern void setcursor __ARGS((void));
extern int win_ins_lines __ARGS((win_T *wp, int row, int line_count, int invalid, int mayclear));
extern int win_del_lines __ARGS((win_T *wp, int row, int line_count, int invalid, int mayclear));
extern int screen_ins_lines __ARGS((int off, int row, int line_count, int end, win_T *wp));
extern int screen_del_lines __ARGS((int off, int row, int line_count, int end, int force, win_T *wp));
extern int showmode __ARGS((void));
extern void unshowmode __ARGS((int force));
extern void get_trans_bufname __ARGS((buf_T *buf));
extern int redrawing __ARGS((void));
extern int messaging __ARGS((void));
extern void showruler __ARGS((int always));
extern int number_width __ARGS((win_T *wp));
/* vim: set ft=c : */
