/* window.c */
extern void do_window __ARGS((int nchar, long Prenum, int xchar));
extern int win_split __ARGS((int size, int flags));
extern int win_valid __ARGS((win_T *win));
extern int win_count __ARGS((void));
extern int make_windows __ARGS((int count, int vertical));
extern void win_move_after __ARGS((win_T *win1, win_T *win2));
extern void win_equal __ARGS((win_T *next_curwin, int current, int dir));
extern void close_windows __ARGS((buf_T *buf, int keep_curwin));
extern void win_close __ARGS((win_T *win, int free_buf));
extern void win_close_othertab __ARGS((win_T *win, int free_buf, tabpage_T *tp));
extern void win_free_all __ARGS((void));
extern void close_others __ARGS((int message, int forceit));
extern void curwin_init __ARGS((void));
extern int win_alloc_first __ARGS((void));
extern void win_init_size __ARGS((void));
extern void free_tabpage __ARGS((tabpage_T *tp));
extern int win_new_tabpage __ARGS((int after));
extern int may_open_tabpage __ARGS((void));
extern int make_tabpages __ARGS((int maxcount));
extern int valid_tabpage __ARGS((tabpage_T *tpc));
extern tabpage_T *find_tabpage __ARGS((int n));
extern int tabpage_index __ARGS((tabpage_T *ftp));
extern void goto_tabpage __ARGS((int n));
extern void goto_tabpage_tp __ARGS((tabpage_T *tp));
extern void goto_tabpage_win __ARGS((tabpage_T *tp, win_T *wp));
extern void tabpage_move __ARGS((int nr));
extern void win_goto __ARGS((win_T *wp));
extern win_T *win_find_nr __ARGS((int winnr));
extern void win_enter __ARGS((win_T *wp, int undo_sync));
extern win_T *buf_jump_open_win __ARGS((buf_T *buf));
extern win_T *buf_jump_open_tab __ARGS((buf_T *buf));
extern int win_alloc_lines __ARGS((win_T *wp));
extern void win_free_lsize __ARGS((win_T *wp));
extern void shell_new_rows __ARGS((void));
extern void shell_new_columns __ARGS((void));
extern void win_size_save __ARGS((garray_T *gap));
extern void win_size_restore __ARGS((garray_T *gap));
extern int win_comp_pos __ARGS((void));
extern void win_setheight __ARGS((int height));
extern void win_setheight_win __ARGS((int height, win_T *win));
extern void win_setwidth __ARGS((int width));
extern void win_setwidth_win __ARGS((int width, win_T *wp));
extern void win_setminheight __ARGS((void));
extern void win_drag_status_line __ARGS((win_T *dragwin, int offset));
extern void win_drag_vsep_line __ARGS((win_T *dragwin, int offset));
extern void win_comp_scroll __ARGS((win_T *wp));
extern void command_height __ARGS((void));
extern void last_status __ARGS((int morewin));
extern int tabline_height __ARGS((void));
extern char_u *grab_file_name __ARGS((long count, linenr_T *file_lnum));
extern char_u *file_name_at_cursor __ARGS((int options, long count, linenr_T *file_lnum));
extern char_u *file_name_in_line __ARGS((char_u *line, int col, int options, long count, char_u *rel_fname, linenr_T *file_lnum));
extern char_u *find_file_name_in_path __ARGS((char_u *ptr, int len, int options, long count, char_u *rel_fname));
extern int path_with_url __ARGS((char_u *fname));
extern int vim_isAbsName __ARGS((char_u *name));
extern int vim_FullName __ARGS((char_u *fname, char_u *buf, int len, int force));
extern int min_rows __ARGS((void));
extern int only_one_window __ARGS((void));
extern void check_lnums __ARGS((int do_curwin));
extern int win_hasvertsplit __ARGS((void));
/* vim: set ft=c : */
