diff --git a/src/proto/misc2.pro b/src/proto/misc2.pro
index 22415d9..adee787 100644
--- a/src/proto/misc2.pro
+++ b/src/proto/misc2.pro
@@ -1,99 +1,99 @@
 /* misc2.c */
-int virtual_active __ARGS((void));
-int getviscol __ARGS((void));
-int getviscol2 __ARGS((colnr_T col, colnr_T coladd));
-int coladvance_force __ARGS((colnr_T wcol));
-int coladvance __ARGS((colnr_T wcol));
-int getvpos __ARGS((pos_T *pos, colnr_T wcol));
-int inc_cursor __ARGS((void));
-int inc __ARGS((pos_T *lp));
-int incl __ARGS((pos_T *lp));
-int dec_cursor __ARGS((void));
-int dec __ARGS((pos_T *lp));
-int decl __ARGS((pos_T *lp));
-void check_cursor_lnum __ARGS((void));
-void check_cursor_col __ARGS((void));
-void check_cursor __ARGS((void));
-void adjust_cursor_col __ARGS((void));
-int leftcol_changed __ARGS((void));
-void vim_mem_profile_dump __ARGS((void));
-char_u *alloc __ARGS((unsigned size));
-char_u *alloc_clear __ARGS((unsigned size));
-char_u *alloc_check __ARGS((unsigned size));
-char_u *lalloc_clear __ARGS((long_u size, int message));
-char_u *lalloc __ARGS((long_u size, int message));
-void *mem_realloc __ARGS((void *ptr, size_t size));
-void do_outofmem_msg __ARGS((long_u size));
-void free_all_mem __ARGS((void));
-char_u *vim_strsave __ARGS((char_u *string));
-char_u *vim_strnsave __ARGS((char_u *string, int len));
-char_u *vim_strsave_escaped __ARGS((char_u *string, char_u *esc_chars));
-char_u *vim_strsave_escaped_ext __ARGS((char_u *string, char_u *esc_chars, int cc, int bsl));
-char_u *vim_strsave_up __ARGS((char_u *string));
-char_u *vim_strnsave_up __ARGS((char_u *string, int len));
-void vim_strup __ARGS((char_u *p));
-char_u *strup_save __ARGS((char_u *orig));
-void copy_spaces __ARGS((char_u *ptr, size_t count));
-void copy_chars __ARGS((char_u *ptr, size_t count, int c));
-void del_trailing_spaces __ARGS((char_u *ptr));
-void vim_strncpy __ARGS((char_u *to, char_u *from, size_t len));
-int copy_option_part __ARGS((char_u **option, char_u *buf, int maxlen, char *sep_chars));
-void vim_free __ARGS((void *x));
-int vim_stricmp __ARGS((char *s1, char *s2));
-int vim_strnicmp __ARGS((char *s1, char *s2, size_t len));
-char_u *vim_strchr __ARGS((char_u *string, int c));
-char_u *vim_strbyte __ARGS((char_u *string, int c));
-char_u *vim_strrchr __ARGS((char_u *string, int c));
-int vim_isspace __ARGS((int x));
-void ga_clear __ARGS((garray_T *gap));
-void ga_clear_strings __ARGS((garray_T *gap));
-void ga_init __ARGS((garray_T *gap));
-void ga_init2 __ARGS((garray_T *gap, int itemsize, int growsize));
-int ga_grow __ARGS((garray_T *gap, int n));
-void ga_concat __ARGS((garray_T *gap, char_u *s));
-void ga_append __ARGS((garray_T *gap, int c));
-int name_to_mod_mask __ARGS((int c));
-int simplify_key __ARGS((int key, int *modifiers));
-int handle_x_keys __ARGS((int key));
-char_u *get_special_key_name __ARGS((int c, int modifiers));
-int trans_special __ARGS((char_u **srcp, char_u *dst, int keycode));
-int find_special_key __ARGS((char_u **srcp, int *modp, int keycode));
-int extract_modifiers __ARGS((int key, int *modp));
-int find_special_key_in_table __ARGS((int c));
-int get_special_key_code __ARGS((char_u *name));
-char_u *get_key_name __ARGS((int i));
-int get_mouse_button __ARGS((int code, int *is_click, int *is_drag));
-int get_pseudo_mouse_code __ARGS((int button, int is_click, int is_drag));
-int get_fileformat __ARGS((buf_T *buf));
-int get_fileformat_force __ARGS((buf_T *buf, exarg_T *eap));
-void set_fileformat __ARGS((int t, int opt_flags));
-int default_fileformat __ARGS((void));
-int call_shell __ARGS((char_u *cmd, int opt));
-int get_real_state __ARGS((void));
-int after_pathsep __ARGS((char_u *b, char_u *p));
-int same_directory __ARGS((char_u *f1, char_u *f2));
-int vim_chdirfile __ARGS((char_u *fname));
-int illegal_slash __ARGS((char *name));
-char_u *parse_shape_opt __ARGS((int what));
-int get_shape_idx __ARGS((int mouse));
-void update_mouseshape __ARGS((int shape_idx));
-int decrypt_byte __ARGS((void));
-int update_keys __ARGS((int c));
-void crypt_init_keys __ARGS((char_u *passwd));
-char_u *get_crypt_key __ARGS((int store, int twice));
-void *vim_findfile_init __ARGS((char_u *path, char_u *filename, char_u *stopdirs, int level, int free_visited, int need_dir, void *search_ctx, int tagfile, char_u *rel_fname));
-char_u *vim_findfile_stopdir __ARGS((char_u *buf));
-void vim_findfile_cleanup __ARGS((void *ctx));
-char_u *vim_findfile __ARGS((void *search_ctx));
-void vim_findfile_free_visited __ARGS((void *search_ctx));
-char_u *find_file_in_path __ARGS((char_u *ptr, int len, int options, int first, char_u *rel_fname));
-char_u *find_directory_in_path __ARGS((char_u *ptr, int len, int options, char_u *rel_fname));
-char_u *find_file_in_path_option __ARGS((char_u *ptr, int len, int options, int first, char_u *path_option, int need_dir, char_u *rel_fname, char_u *suffixes));
-int vim_chdir __ARGS((char_u *new_dir));
-int get_user_name __ARGS((char_u *buf, int len));
-void sort_strings __ARGS((char_u **files, int count));
-int pathcmp __ARGS((const char *p, const char *q, int maxlen));
-int filewritable __ARGS((char_u *fname));
-int emsg3 __ARGS((char_u *s, char_u *a1, char_u *a2));
-int emsgn __ARGS((char_u *s, long n));
+extern int virtual_active __ARGS((void));
+extern int getviscol __ARGS((void));
+extern int getviscol2 __ARGS((colnr_T col, colnr_T coladd));
+extern int coladvance_force __ARGS((colnr_T wcol));
+extern int coladvance __ARGS((colnr_T wcol));
+extern int getvpos __ARGS((pos_T *pos, colnr_T wcol));
+extern int inc_cursor __ARGS((void));
+extern int inc __ARGS((pos_T *lp));
+extern int incl __ARGS((pos_T *lp));
+extern int dec_cursor __ARGS((void));
+extern int dec __ARGS((pos_T *lp));
+extern int decl __ARGS((pos_T *lp));
+extern void check_cursor_lnum __ARGS((void));
+extern void check_cursor_col __ARGS((void));
+extern void check_cursor __ARGS((void));
+extern void adjust_cursor_col __ARGS((void));
+extern int leftcol_changed __ARGS((void));
+extern void vim_mem_profile_dump __ARGS((void));
+extern char_u *alloc __ARGS((unsigned size));
+extern char_u *alloc_clear __ARGS((unsigned size));
+extern char_u *alloc_check __ARGS((unsigned size));
+extern char_u *lalloc_clear __ARGS((long_u size, int message));
+extern char_u *lalloc __ARGS((long_u size, int message));
+extern void *mem_realloc __ARGS((void *ptr, size_t size));
+extern void do_outofmem_msg __ARGS((long_u size));
+extern void free_all_mem __ARGS((void));
+extern char_u *vim_strsave __ARGS((char_u *string));
+extern char_u *vim_strnsave __ARGS((char_u *string, int len));
+extern char_u *vim_strsave_escaped __ARGS((char_u *string, char_u *esc_chars));
+extern char_u *vim_strsave_escaped_ext __ARGS((char_u *string, char_u *esc_chars, int cc, int bsl));
+extern char_u *vim_strsave_up __ARGS((char_u *string));
+extern char_u *vim_strnsave_up __ARGS((char_u *string, int len));
+extern void vim_strup __ARGS((char_u *p));
+extern char_u *strup_save __ARGS((char_u *orig));
+extern void copy_spaces __ARGS((char_u *ptr, size_t count));
+extern void copy_chars __ARGS((char_u *ptr, size_t count, int c));
+extern void del_trailing_spaces __ARGS((char_u *ptr));
+extern void vim_strncpy __ARGS((char_u *to, char_u *from, size_t len));
+extern int copy_option_part __ARGS((char_u **option, char_u *buf, int maxlen, char *sep_chars));
+extern void vim_free __ARGS((void *x));
+extern int vim_stricmp __ARGS((char *s1, char *s2));
+extern int vim_strnicmp __ARGS((char *s1, char *s2, size_t len));
+extern char_u *vim_strchr __ARGS((char_u *string, int c));
+extern char_u *vim_strbyte __ARGS((char_u *string, int c));
+extern char_u *vim_strrchr __ARGS((char_u *string, int c));
+extern int vim_isspace __ARGS((int x));
+extern void ga_clear __ARGS((garray_T *gap));
+extern void ga_clear_strings __ARGS((garray_T *gap));
+extern void ga_init __ARGS((garray_T *gap));
+extern void ga_init2 __ARGS((garray_T *gap, int itemsize, int growsize));
+extern int ga_grow __ARGS((garray_T *gap, int n));
+extern void ga_concat __ARGS((garray_T *gap, char_u *s));
+extern void ga_append __ARGS((garray_T *gap, int c));
+extern int name_to_mod_mask __ARGS((int c));
+extern int simplify_key __ARGS((int key, int *modifiers));
+extern int handle_x_keys __ARGS((int key));
+extern char_u *get_special_key_name __ARGS((int c, int modifiers));
+extern int trans_special __ARGS((char_u **srcp, char_u *dst, int keycode));
+extern int find_special_key __ARGS((char_u **srcp, int *modp, int keycode));
+extern int extract_modifiers __ARGS((int key, int *modp));
+extern int find_special_key_in_table __ARGS((int c));
+extern int get_special_key_code __ARGS((char_u *name));
+extern char_u *get_key_name __ARGS((int i));
+extern int get_mouse_button __ARGS((int code, int *is_click, int *is_drag));
+extern int get_pseudo_mouse_code __ARGS((int button, int is_click, int is_drag));
+extern int get_fileformat __ARGS((buf_T *buf));
+extern int get_fileformat_force __ARGS((buf_T *buf, exarg_T *eap));
+extern void set_fileformat __ARGS((int t, int opt_flags));
+extern int default_fileformat __ARGS((void));
+extern int call_shell __ARGS((char_u *cmd, int opt));
+extern int get_real_state __ARGS((void));
+extern int after_pathsep __ARGS((char_u *b, char_u *p));
+extern int same_directory __ARGS((char_u *f1, char_u *f2));
+extern int vim_chdirfile __ARGS((char_u *fname));
+extern int illegal_slash __ARGS((char *name));
+extern char_u *parse_shape_opt __ARGS((int what));
+extern int get_shape_idx __ARGS((int mouse));
+extern void update_mouseshape __ARGS((int shape_idx));
+extern int decrypt_byte __ARGS((void));
+extern int update_keys __ARGS((int c));
+extern void crypt_init_keys __ARGS((char_u *passwd));
+extern char_u *get_crypt_key __ARGS((int store, int twice));
+extern void *vim_findfile_init __ARGS((char_u *path, char_u *filename, char_u *stopdirs, int level, int free_visited, int need_dir, void *search_ctx, int tagfile, char_u *rel_fname));
+extern char_u *vim_findfile_stopdir __ARGS((char_u *buf));
+extern void vim_findfile_cleanup __ARGS((void *ctx));
+extern char_u *vim_findfile __ARGS((void *search_ctx));
+extern void vim_findfile_free_visited __ARGS((void *search_ctx));
+extern char_u *find_file_in_path __ARGS((char_u *ptr, int len, int options, int first, char_u *rel_fname));
+extern char_u *find_directory_in_path __ARGS((char_u *ptr, int len, int options, char_u *rel_fname));
+extern char_u *find_file_in_path_option __ARGS((char_u *ptr, int len, int options, int first, char_u *path_option, int need_dir, char_u *rel_fname, char_u *suffixes));
+extern int vim_chdir __ARGS((char_u *new_dir));
+extern int get_user_name __ARGS((char_u *buf, int len));
+extern void sort_strings __ARGS((char_u **files, int count));
+extern int pathcmp __ARGS((const char *p, const char *q, int maxlen));
+extern int filewritable __ARGS((char_u *fname));
+extern int emsg3 __ARGS((char_u *s, char_u *a1, char_u *a2));
+extern int emsgn __ARGS((char_u *s, long n));
 /* vim: set ft=c : */
