diff --git a/src/memline.c b/src/memline.c
index cd39e06..5015f49 100644
--- a/src/memline.c
+++ b/src/memline.c
@@ -2570,7 +2570,7 @@
 		if (lineadd)
 		{
 		    --(buf->b_ml.ml_stack_top);
-			/* fix line count for rest of blocks in the stack */
+		    /* fix line count for rest of blocks in the stack */
 		    ml_lineadd(buf, lineadd);
 							/* fix stack itself */
 		    buf->b_ml.ml_stack[buf->b_ml.ml_stack_top].ip_high +=
@@ -2873,12 +2873,12 @@
 		mf_put(mfp, hp, TRUE, FALSE);
 
 		buf->b_ml.ml_stack_top = stack_idx;	/* truncate stack */
-		    /* fix line count for rest of blocks in the stack */
-		if (buf->b_ml.ml_locked_lineadd)
+		/* fix line count for rest of blocks in the stack */
+		if (buf->b_ml.ml_locked_lineadd != 0)
 		{
 		    ml_lineadd(buf, buf->b_ml.ml_locked_lineadd);
 		    buf->b_ml.ml_stack[buf->b_ml.ml_stack_top].ip_high +=
-						buf->b_ml.ml_locked_lineadd;
+						  buf->b_ml.ml_locked_lineadd;
 		}
 		++(buf->b_ml.ml_stack_top);
 
@@ -3208,7 +3208,7 @@
  * The stack is updated to lead to the locked block. The ip_high field in
  * the stack is updated to reflect the last line in the block AFTER the
  * insert or delete, also if the pointer block has not been updated yet. But
- * if if ml_locked != NULL ml_locked_lineadd must be added to ip_high.
+ * if ml_locked != NULL ml_locked_lineadd must be added to ip_high.
  *
  * return: NULL for failure, pointer to block header otherwise
  */
@@ -3265,11 +3265,11 @@
 					    buf->b_ml.ml_flags & ML_LOCKED_POS);
 	buf->b_ml.ml_locked = NULL;
 
-	    /*
-	     * if lines have been added or deleted in the locked block, need to
-	     * update the line count in pointer blocks
-	     */
-	if (buf->b_ml.ml_locked_lineadd)
+	/*
+	 * If lines have been added or deleted in the locked block, need to
+	 * update the line count in pointer blocks.
+	 */
+	if (buf->b_ml.ml_locked_lineadd != 0)
 	    ml_lineadd(buf, buf->b_ml.ml_locked_lineadd);
     }
 
diff --git a/src/proto/misc2.pro b/src/proto/misc2.pro
index 64637db..195b895 100644
--- a/src/proto/misc2.pro
+++ b/src/proto/misc2.pro
@@ -1,100 +1,100 @@
 /* misc2.c */
-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_shellescape __ARGS((char_u *string));
-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));
+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_shellescape __ARGS((char_u *string));
+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));
 /* vim: set ft=c : */
