diff --git a/runtime/doc/quickfix.txt b/runtime/doc/quickfix.txt
index 7759f18..d0be37e 100644
--- a/runtime/doc/quickfix.txt
+++ b/runtime/doc/quickfix.txt
@@ -1,4 +1,4 @@
-*quickfix.txt*  For Vim version 7.0.  Last change: 2006 Jul 18
+*quickfix.txt*  For Vim version 7.1a.  Last change: 2007 Apr 17
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -432,10 +432,10 @@
 			   errorfile (for Unix it is also echoed on the
 			   screen).
 			5. The errorfile is read using 'errorformat'.
-			6. If [!] is not given the first error is jumped to.
-			7. The errorfile is deleted.
-			8. If vim was built with |+autocmd|, all relevant
+			6. If vim was built with |+autocmd|, all relevant
 			   |QuickFixCmdPost| autocommands are executed.
+			7. If [!] is not given the first error is jumped to.
+			8. The errorfile is deleted.
 			9. You can now move through the errors with commands
 			   like |:cnext| and |:cprevious|, see above.
 			This command does not accept a comment, any "
@@ -1234,15 +1234,32 @@
 Jikes(TM) produces a single-line error message when invoked with the option
 "+E", and can be matched with the following: >
 
-  :set efm=%f:%l:%v:%*\\d:%*\\d:%*\\s%m
+  :setl efm=%f:%l:%v:%*\\d:%*\\d:%*\\s%m
 <
 						*errorformat-javac*
 This 'errorformat' has been reported to work well for javac, which outputs a
 line with "^" to indicate the column of the error: >
-  :set efm=%A%f:%l:\ %m,%-Z%p^,%-C%.%#
+  :setl efm=%A%f:%l:\ %m,%-Z%p^,%-C%.%#
 or: >
-  :set efm=%A%f:%l:\ %m,%+Z%p^,%+C%.%#,%-G%.%#
+  :setl efm=%A%f:%l:\ %m,%+Z%p^,%+C%.%#,%-G%.%#
 <
+Here is an alternative from Michael F. Lamb for Unix that filters the errors
+first: >
+  :setl errorformat=%Z%f:%l:\ %m,%A%p^,%-G%*[^sl]%.%#
+  :setl makeprg=javac\ %\ 2>&1\ \\\|\ vim-javac-filter
+
+You need to put the following in "vim-javac-filter" somewhere in your path
+(e.g., in ~/bin) and make it executable: >
+   #!/bin/sed -f
+   /\^$/s/\t/\ /g;/:[0-9]\+:/{h;d};/^[ \t]*\^/G;
+
+In English, that sed script:
+- Changes single tabs to single spaces and
+- Moves the line with the filename, line number, error message to just after
+  the pointer line. That way, the unused error text between doesn't break
+  vim's notion of a "multi-line message" and also doesn't force us to include
+  it as a "continuation of a multi-line message."
+
 						*errorformat-ant*
 For ant (http://jakarta.apache.org/) the above errorformat has to be modified
 to honour the leading [javac] in front of each javac output line: >
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 : */
