Karsten Hopp 4013be
To: vim_dev@googlegroups.com
Karsten Hopp 4013be
Subject: Patch 7.3.1039
Karsten Hopp 4013be
Fcc: outbox
Karsten Hopp 4013be
From: Bram Moolenaar <Bram@moolenaar.net>
Karsten Hopp 4013be
Mime-Version: 1.0
Karsten Hopp 4013be
Content-Type: text/plain; charset=UTF-8
Karsten Hopp 4013be
Content-Transfer-Encoding: 8bit
Karsten Hopp 4013be
------------
Karsten Hopp 4013be
Karsten Hopp 4013be
Patch 7.3.1039
Karsten Hopp 4013be
Problem:    New regexp engine does not support \%23c, \%<23c and the like. 
Karsten Hopp 4013be
Solution:   Implement them. (partly by Yasuhiro Matsumoto)
Karsten Hopp 4013be
Files:	    src/regexp.h, src/regexp_nfa.c, src/testdir/test64.in,
Karsten Hopp 4013be
	    src/testdir/test64.ok
Karsten Hopp 4013be
Karsten Hopp 4013be
Karsten Hopp 4013be
*** ../vim-7.3.1038/src/regexp.h	2013-05-28 22:03:13.000000000 +0200
Karsten Hopp 4013be
--- src/regexp.h	2013-05-29 20:35:35.000000000 +0200
Karsten Hopp 4013be
***************
Karsten Hopp 4013be
*** 72,77 ****
Karsten Hopp 4013be
--- 72,78 ----
Karsten Hopp 4013be
      int			id;
Karsten Hopp 4013be
      int			lastlist;
Karsten Hopp 4013be
      int			negated;
Karsten Hopp 4013be
+     int			val;
Karsten Hopp 4013be
  };
Karsten Hopp 4013be
  
Karsten Hopp 4013be
  /*
Karsten Hopp 4013be
*** ../vim-7.3.1038/src/regexp_nfa.c	2013-05-29 18:45:07.000000000 +0200
Karsten Hopp 4013be
--- src/regexp_nfa.c	2013-05-29 20:59:34.000000000 +0200
Karsten Hopp 4013be
***************
Karsten Hopp 4013be
*** 117,122 ****
Karsten Hopp 4013be
--- 117,134 ----
Karsten Hopp 4013be
      NFA_NLOWER,		/*	Match non-lowercase char */
Karsten Hopp 4013be
      NFA_UPPER,		/*	Match uppercase char */
Karsten Hopp 4013be
      NFA_NUPPER,		/*	Match non-uppercase char */
Karsten Hopp 4013be
+ 
Karsten Hopp 4013be
+     NFA_CURSOR,		/*	Match cursor pos */
Karsten Hopp 4013be
+     NFA_LNUM,		/*	Match line number */
Karsten Hopp 4013be
+     NFA_LNUM_GT,	/*	Match > line number */
Karsten Hopp 4013be
+     NFA_LNUM_LT,	/*	Match < line number */
Karsten Hopp 4013be
+     NFA_COL,		/*	Match cursor column */
Karsten Hopp 4013be
+     NFA_COL_GT,		/*	Match > cursor column */
Karsten Hopp 4013be
+     NFA_COL_LT,		/*	Match < cursor column */
Karsten Hopp 4013be
+     NFA_VCOL,		/*	Match cursor virtual column */
Karsten Hopp 4013be
+     NFA_VCOL_GT,	/*	Match > cursor virtual column */
Karsten Hopp 4013be
+     NFA_VCOL_LT,	/*	Match < cursor virtual column */
Karsten Hopp 4013be
+ 
Karsten Hopp 4013be
      NFA_FIRST_NL = NFA_ANY + ADD_NL,
Karsten Hopp 4013be
      NFA_LAST_NL = NFA_NUPPER + ADD_NL,
Karsten Hopp 4013be
  
Karsten Hopp 4013be
***************
Karsten Hopp 4013be
*** 205,214 ****
Karsten Hopp 4013be
  static nfa_state_T *post2nfa __ARGS((int *postfix, int *end, int nfa_calc_size));
Karsten Hopp 4013be
  static int check_char_class __ARGS((int class, int c));
Karsten Hopp 4013be
  static void st_error __ARGS((int *postfix, int *end, int *p));
Karsten Hopp 4013be
  static void nfa_save_listids __ARGS((nfa_state_T *start, int *list));
Karsten Hopp 4013be
  static void nfa_restore_listids __ARGS((nfa_state_T *start, int *list));
Karsten Hopp 4013be
! static void nfa_set_null_listids __ARGS((nfa_state_T *start));
Karsten Hopp 4013be
! static void nfa_set_neg_listids __ARGS((nfa_state_T *start));
Karsten Hopp 4013be
  static long nfa_regtry __ARGS((nfa_state_T *start, colnr_T col));
Karsten Hopp 4013be
  static long nfa_regexec_both __ARGS((char_u *line, colnr_T col));
Karsten Hopp 4013be
  static regprog_T *nfa_regcomp __ARGS((char_u *expr, int re_flags));
Karsten Hopp 4013be
--- 217,227 ----
Karsten Hopp 4013be
  static nfa_state_T *post2nfa __ARGS((int *postfix, int *end, int nfa_calc_size));
Karsten Hopp 4013be
  static int check_char_class __ARGS((int class, int c));
Karsten Hopp 4013be
  static void st_error __ARGS((int *postfix, int *end, int *p));
Karsten Hopp 4013be
+ static void nfa_set_neg_listids __ARGS((nfa_state_T *start));
Karsten Hopp 4013be
+ static void nfa_set_null_listids __ARGS((nfa_state_T *start));
Karsten Hopp 4013be
  static void nfa_save_listids __ARGS((nfa_state_T *start, int *list));
Karsten Hopp 4013be
  static void nfa_restore_listids __ARGS((nfa_state_T *start, int *list));
Karsten Hopp 4013be
! static int nfa_re_num_cmp __ARGS((long_u val, int op, long_u pos));
Karsten Hopp 4013be
  static long nfa_regtry __ARGS((nfa_state_T *start, colnr_T col));
Karsten Hopp 4013be
  static long nfa_regexec_both __ARGS((char_u *line, colnr_T col));
Karsten Hopp 4013be
  static regprog_T *nfa_regcomp __ARGS((char_u *expr, int re_flags));
Karsten Hopp 4013be
***************
Karsten Hopp 4013be
*** 831,838 ****
Karsten Hopp 4013be
  		    break;
Karsten Hopp 4013be
  
Karsten Hopp 4013be
  		case '#':
Karsten Hopp 4013be
! 		    /* TODO: not supported yet */
Karsten Hopp 4013be
! 		    return FAIL;
Karsten Hopp 4013be
  		    break;
Karsten Hopp 4013be
  
Karsten Hopp 4013be
  		case 'V':
Karsten Hopp 4013be
--- 844,850 ----
Karsten Hopp 4013be
  		    break;
Karsten Hopp 4013be
  
Karsten Hopp 4013be
  		case '#':
Karsten Hopp 4013be
! 		    EMIT(NFA_CURSOR);
Karsten Hopp 4013be
  		    break;
Karsten Hopp 4013be
  
Karsten Hopp 4013be
  		case 'V':
Karsten Hopp 4013be
***************
Karsten Hopp 4013be
*** 844,866 ****
Karsten Hopp 4013be
  		    /* TODO: \%[abc] not supported yet */
Karsten Hopp 4013be
  		    return FAIL;
Karsten Hopp 4013be
  
Karsten Hopp 4013be
- 		case '0':
Karsten Hopp 4013be
- 		case '1':
Karsten Hopp 4013be
- 		case '2':
Karsten Hopp 4013be
- 		case '3':
Karsten Hopp 4013be
- 		case '4':
Karsten Hopp 4013be
- 		case '5':
Karsten Hopp 4013be
- 		case '6':
Karsten Hopp 4013be
- 		case '7':
Karsten Hopp 4013be
- 		case '8':
Karsten Hopp 4013be
- 		case '9':
Karsten Hopp 4013be
- 		case '<':
Karsten Hopp 4013be
- 		case '>':
Karsten Hopp 4013be
- 		case '\'':
Karsten Hopp 4013be
- 		    /* TODO: not supported yet */
Karsten Hopp 4013be
- 		    return FAIL;
Karsten Hopp 4013be
- 
Karsten Hopp 4013be
  		default:
Karsten Hopp 4013be
  		    syntax_error = TRUE;
Karsten Hopp 4013be
  		    EMSGN(_("E867: (NFA) Unknown operator '\\%%%c'"),
Karsten Hopp 4013be
  								 no_Magic(c));
Karsten Hopp 4013be
--- 856,891 ----
Karsten Hopp 4013be
  		    /* TODO: \%[abc] not supported yet */
Karsten Hopp 4013be
  		    return FAIL;
Karsten Hopp 4013be
  
Karsten Hopp 4013be
  		default:
Karsten Hopp 4013be
+ 		    {
Karsten Hopp 4013be
+ 			long_u	n = 0;
Karsten Hopp 4013be
+ 			int	cmp = c;
Karsten Hopp 4013be
+ 
Karsten Hopp 4013be
+ 			if (c == '<' || c == '>')
Karsten Hopp 4013be
+ 			    c = getchr();
Karsten Hopp 4013be
+ 			while (VIM_ISDIGIT(c))
Karsten Hopp 4013be
+ 			{
Karsten Hopp 4013be
+ 			    n = n * 10 + (c - '0');
Karsten Hopp 4013be
+ 			    c = getchr();
Karsten Hopp 4013be
+ 			}
Karsten Hopp 4013be
+ 			if (c == 'l' || c == 'c' || c == 'v')
Karsten Hopp 4013be
+ 			{
Karsten Hopp 4013be
+ 			    EMIT(n);
Karsten Hopp 4013be
+ 			    if (c == 'l')
Karsten Hopp 4013be
+ 				EMIT(cmp == '<' ? NFA_LNUM_LT :
Karsten Hopp 4013be
+ 					cmp == '>' ? NFA_LNUM_GT : NFA_LNUM);
Karsten Hopp 4013be
+ 			    else if (c == 'c')
Karsten Hopp 4013be
+ 				EMIT(cmp == '<' ? NFA_COL_LT :
Karsten Hopp 4013be
+ 					cmp == '>' ? NFA_COL_GT : NFA_COL);
Karsten Hopp 4013be
+ 			    else
Karsten Hopp 4013be
+ 				EMIT(cmp == '<' ? NFA_VCOL_LT :
Karsten Hopp 4013be
+ 					cmp == '>' ? NFA_VCOL_GT : NFA_VCOL);
Karsten Hopp 4013be
+ 			    break;
Karsten Hopp 4013be
+ 			}
Karsten Hopp 4013be
+ 			else if (c == '\'')
Karsten Hopp 4013be
+ 			    /* TODO: \%'m not supported yet */
Karsten Hopp 4013be
+ 			    return FAIL;
Karsten Hopp 4013be
+ 		    }
Karsten Hopp 4013be
  		    syntax_error = TRUE;
Karsten Hopp 4013be
  		    EMSGN(_("E867: (NFA) Unknown operator '\\%%%c'"),
Karsten Hopp 4013be
  								 no_Magic(c));
Karsten Hopp 4013be
***************
Karsten Hopp 4013be
*** 1679,1684 ****
Karsten Hopp 4013be
--- 1704,1711 ----
Karsten Hopp 4013be
  
Karsten Hopp 4013be
  	case NFA_PREV_ATOM_NO_WIDTH:
Karsten Hopp 4013be
  			    STRCPY(code, "NFA_PREV_ATOM_NO_WIDTH"); break;
Karsten Hopp 4013be
+ 	case NFA_PREV_ATOM_NO_WIDTH_NEG:
Karsten Hopp 4013be
+ 			    STRCPY(code, "NFA_PREV_ATOM_NO_WIDTH_NEG"); break;
Karsten Hopp 4013be
  	case NFA_NOPEN:		    STRCPY(code, "NFA_MOPEN_INVISIBLE"); break;
Karsten Hopp 4013be
  	case NFA_NCLOSE:	    STRCPY(code, "NFA_MCLOSE_INVISIBLE"); break;
Karsten Hopp 4013be
  	case NFA_START_INVISIBLE:   STRCPY(code, "NFA_START_INVISIBLE"); break;
Karsten Hopp 4013be
***************
Karsten Hopp 4013be
*** 2444,2449 ****
Karsten Hopp 4013be
--- 2471,2498 ----
Karsten Hopp 4013be
  	    PUSH(frag(s, list1(&s1->out)));
Karsten Hopp 4013be
  	    break;
Karsten Hopp 4013be
  
Karsten Hopp 4013be
+ 	case NFA_LNUM:
Karsten Hopp 4013be
+ 	case NFA_LNUM_GT:
Karsten Hopp 4013be
+ 	case NFA_LNUM_LT:
Karsten Hopp 4013be
+ 	case NFA_VCOL:
Karsten Hopp 4013be
+ 	case NFA_VCOL_GT:
Karsten Hopp 4013be
+ 	case NFA_VCOL_LT:
Karsten Hopp 4013be
+ 	case NFA_COL:
Karsten Hopp 4013be
+ 	case NFA_COL_GT:
Karsten Hopp 4013be
+ 	case NFA_COL_LT:
Karsten Hopp 4013be
+ 	    if (nfa_calc_size == TRUE)
Karsten Hopp 4013be
+ 	    {
Karsten Hopp 4013be
+ 		nstate += 1;
Karsten Hopp 4013be
+ 		break;
Karsten Hopp 4013be
+ 	    }
Karsten Hopp 4013be
+ 	    e1 = POP();
Karsten Hopp 4013be
+ 	    s = new_state(*p, NULL, NULL);
Karsten Hopp 4013be
+ 	    if (s == NULL)
Karsten Hopp 4013be
+ 		goto theend;
Karsten Hopp 4013be
+ 	    s->val = e1.start->c;
Karsten Hopp 4013be
+ 	    PUSH(frag(s, list1(&s->out)));
Karsten Hopp 4013be
+ 	    break;
Karsten Hopp 4013be
+ 
Karsten Hopp 4013be
  	case NFA_ZSTART:
Karsten Hopp 4013be
  	case NFA_ZEND:
Karsten Hopp 4013be
  	default:
Karsten Hopp 4013be
***************
Karsten Hopp 4013be
*** 3076,3081 ****
Karsten Hopp 4013be
--- 3125,3141 ----
Karsten Hopp 4013be
      }
Karsten Hopp 4013be
  }
Karsten Hopp 4013be
  
Karsten Hopp 4013be
+     static int
Karsten Hopp 4013be
+ nfa_re_num_cmp(val, op, pos)
Karsten Hopp 4013be
+     long_u	val;
Karsten Hopp 4013be
+     int		op;
Karsten Hopp 4013be
+     long_u	pos;
Karsten Hopp 4013be
+ {
Karsten Hopp 4013be
+     if (op == 1) return pos > val;
Karsten Hopp 4013be
+     if (op == 2) return pos < val;
Karsten Hopp 4013be
+     return val == pos;
Karsten Hopp 4013be
+ }
Karsten Hopp 4013be
+ 
Karsten Hopp 4013be
  static int nfa_regmatch __ARGS((nfa_state_T *start, regsub_T *submatch, regsub_T *m));
Karsten Hopp 4013be
  
Karsten Hopp 4013be
  /*
Karsten Hopp 4013be
***************
Karsten Hopp 4013be
*** 3791,3796 ****
Karsten Hopp 4013be
--- 3851,3895 ----
Karsten Hopp 4013be
  		/* TODO: should not happen? */
Karsten Hopp 4013be
  		break;
Karsten Hopp 4013be
  
Karsten Hopp 4013be
+ 	    case NFA_LNUM:
Karsten Hopp 4013be
+ 	    case NFA_LNUM_GT:
Karsten Hopp 4013be
+ 	    case NFA_LNUM_LT:
Karsten Hopp 4013be
+ 		result = (REG_MULTI &&
Karsten Hopp 4013be
+ 			nfa_re_num_cmp(t->state->val, t->state->c - NFA_LNUM,
Karsten Hopp 4013be
+ 			    (long_u)(reglnum + reg_firstlnum)));
Karsten Hopp 4013be
+ 		if (result)
Karsten Hopp 4013be
+ 		    addstate_here(thislist, t->state->out, &t->sub, &listidx);
Karsten Hopp 4013be
+ 		break;
Karsten Hopp 4013be
+ 
Karsten Hopp 4013be
+ 	    case NFA_COL:
Karsten Hopp 4013be
+ 	    case NFA_COL_GT:
Karsten Hopp 4013be
+ 	    case NFA_COL_LT:
Karsten Hopp 4013be
+ 		result = nfa_re_num_cmp(t->state->val, t->state->c - NFA_COL,
Karsten Hopp 4013be
+ 			(long_u)(reginput - regline) + 1);
Karsten Hopp 4013be
+ 		if (result)
Karsten Hopp 4013be
+ 		    addstate_here(thislist, t->state->out, &t->sub, &listidx);
Karsten Hopp 4013be
+ 		break;
Karsten Hopp 4013be
+ 
Karsten Hopp 4013be
+ 	    case NFA_VCOL:
Karsten Hopp 4013be
+ 	    case NFA_VCOL_GT:
Karsten Hopp 4013be
+ 	    case NFA_VCOL_LT:
Karsten Hopp 4013be
+ 		result = nfa_re_num_cmp(t->state->val, t->state->c - NFA_VCOL,
Karsten Hopp 4013be
+ 		    (long_u)win_linetabsize(
Karsten Hopp 4013be
+ 			    reg_win == NULL ? curwin : reg_win,
Karsten Hopp 4013be
+ 			    regline, (colnr_T)(reginput - regline)) + 1);
Karsten Hopp 4013be
+ 		if (result)
Karsten Hopp 4013be
+ 		    addstate_here(thislist, t->state->out, &t->sub, &listidx);
Karsten Hopp 4013be
+ 		break;
Karsten Hopp 4013be
+ 
Karsten Hopp 4013be
+ 	    case NFA_CURSOR:
Karsten Hopp 4013be
+ 		result = (reg_win != NULL
Karsten Hopp 4013be
+ 			&& (reglnum + reg_firstlnum == reg_win->w_cursor.lnum)
Karsten Hopp 4013be
+ 			&& ((colnr_T)(reginput - regline)
Karsten Hopp 4013be
+ 						   == reg_win->w_cursor.col));
Karsten Hopp 4013be
+ 		if (result)
Karsten Hopp 4013be
+ 		    addstate_here(thislist, t->state->out, &t->sub, &listidx);
Karsten Hopp 4013be
+ 		break;
Karsten Hopp 4013be
+ 
Karsten Hopp 4013be
  	    default:	/* regular character */
Karsten Hopp 4013be
  	      {
Karsten Hopp 4013be
  		int c = t->state->c;
Karsten Hopp 4013be
*** ../vim-7.3.1038/src/testdir/test64.in	2013-05-29 18:45:07.000000000 +0200
Karsten Hopp 4013be
--- src/testdir/test64.in	2013-05-29 21:02:52.000000000 +0200
Karsten Hopp 4013be
***************
Karsten Hopp 4013be
*** 413,425 ****
Karsten Hopp 4013be
  :.yank
Karsten Hopp 4013be
  y$Go?p:"
Karsten Hopp 4013be
  :"
Karsten Hopp 4013be
- :"
Karsten Hopp 4013be
  :" Check a pattern with a look beind crossing a line boundary
Karsten Hopp 4013be
  /^Behind:
Karsten Hopp 4013be
  /\(<\_[xy]\+\)\@3<=start
Karsten Hopp 4013be
  :.yank
Karsten Hopp 4013be
  Go?p:"
Karsten Hopp 4013be
  :"
Karsten Hopp 4013be
  :/\%#=1^Results/,$wq! test.out
Karsten Hopp 4013be
  ENDTEST
Karsten Hopp 4013be
  
Karsten Hopp 4013be
--- 413,452 ----
Karsten Hopp 4013be
  :.yank
Karsten Hopp 4013be
  y$Go?p:"
Karsten Hopp 4013be
  :"
Karsten Hopp 4013be
  :" Check a pattern with a look beind crossing a line boundary
Karsten Hopp 4013be
  /^Behind:
Karsten Hopp 4013be
  /\(<\_[xy]\+\)\@3<=start
Karsten Hopp 4013be
  :.yank
Karsten Hopp 4013be
  Go?p:"
Karsten Hopp 4013be
  :"
Karsten Hopp 4013be
+ :" Check patterns matching cursor position.
Karsten Hopp 4013be
+ :func! Postest()
Karsten Hopp 4013be
+  new
Karsten Hopp 4013be
+  call setline(1, ['ffooooo', 'boboooo', 'zoooooo', 'koooooo', 'moooooo', "\t\t\tfoo", 'abababababababfoo', 'bababababababafoo', '********_'])
Karsten Hopp 4013be
+  call setpos('.', [0, 1, 0, 0])
Karsten Hopp 4013be
+  s/\%>3c.//g
Karsten Hopp 4013be
+  call setpos('.', [0, 2, 4, 0])
Karsten Hopp 4013be
+  s/\%#.*$//g
Karsten Hopp 4013be
+  call setpos('.', [0, 3, 0, 0])
Karsten Hopp 4013be
+  s/\%<3c./_/g
Karsten Hopp 4013be
+  %s/\%4l\%>5c./_/g
Karsten Hopp 4013be
+  %s/\%6l\%>25v./_/g
Karsten Hopp 4013be
+  %s/\%>6l\%3c./!/g
Karsten Hopp 4013be
+  %s/\%>7l\%12c./?/g
Karsten Hopp 4013be
+  %s/\%>7l\%<9l\%>5v\%<8v./#/g
Karsten Hopp 4013be
+  1,$yank
Karsten Hopp 4013be
+  quit!
Karsten Hopp 4013be
+ endfunc
Karsten Hopp 4013be
+ Go-0-?:set re=0
Karsten Hopp 4013be
+ :call Postest()
Karsten Hopp 4013be
+ :put
Karsten Hopp 4013be
+ o-1-?:set re=1
Karsten Hopp 4013be
+ :call Postest()
Karsten Hopp 4013be
+ :put
Karsten Hopp 4013be
+ o-2-?:set re=2
Karsten Hopp 4013be
+ :call Postest()
Karsten Hopp 4013be
+ :put
Karsten Hopp 4013be
+ :"
Karsten Hopp 4013be
  :/\%#=1^Results/,$wq! test.out
Karsten Hopp 4013be
  ENDTEST
Karsten Hopp 4013be
  
Karsten Hopp 4013be
*** ../vim-7.3.1038/src/testdir/test64.ok	2013-05-29 18:45:07.000000000 +0200
Karsten Hopp 4013be
--- src/testdir/test64.ok	2013-05-29 21:02:49.000000000 +0200
Karsten Hopp 4013be
***************
Karsten Hopp 4013be
*** 740,742 ****
Karsten Hopp 4013be
--- 740,772 ----
Karsten Hopp 4013be
  ghi
Karsten Hopp 4013be
  
Karsten Hopp 4013be
  xxxstart3
Karsten Hopp 4013be
+ -0-
Karsten Hopp 4013be
+ ffo
Karsten Hopp 4013be
+ bob
Karsten Hopp 4013be
+ __ooooo
Karsten Hopp 4013be
+ koooo__
Karsten Hopp 4013be
+ moooooo
Karsten Hopp 4013be
+ 			f__
Karsten Hopp 4013be
+ ab!babababababfoo
Karsten Hopp 4013be
+ ba!ab##abab?bafoo
Karsten Hopp 4013be
+ **!*****_
Karsten Hopp 4013be
+ -1-
Karsten Hopp 4013be
+ ffo
Karsten Hopp 4013be
+ bob
Karsten Hopp 4013be
+ __ooooo
Karsten Hopp 4013be
+ koooo__
Karsten Hopp 4013be
+ moooooo
Karsten Hopp 4013be
+ 			f__
Karsten Hopp 4013be
+ ab!babababababfoo
Karsten Hopp 4013be
+ ba!ab##abab?bafoo
Karsten Hopp 4013be
+ **!*****_
Karsten Hopp 4013be
+ -2-
Karsten Hopp 4013be
+ ffo
Karsten Hopp 4013be
+ bob
Karsten Hopp 4013be
+ __ooooo
Karsten Hopp 4013be
+ koooo__
Karsten Hopp 4013be
+ moooooo
Karsten Hopp 4013be
+ 			f__
Karsten Hopp 4013be
+ ab!babababababfoo
Karsten Hopp 4013be
+ ba!ab##abab?bafoo
Karsten Hopp 4013be
+ **!*****_
Karsten Hopp 4013be
*** ../vim-7.3.1038/src/version.c	2013-05-29 19:17:55.000000000 +0200
Karsten Hopp 4013be
--- src/version.c	2013-05-29 21:11:47.000000000 +0200
Karsten Hopp 4013be
***************
Karsten Hopp 4013be
*** 730,731 ****
Karsten Hopp 4013be
--- 730,733 ----
Karsten Hopp 4013be
  {   /* Add new patch number below this line */
Karsten Hopp 4013be
+ /**/
Karsten Hopp 4013be
+     1039,
Karsten Hopp 4013be
  /**/
Karsten Hopp 4013be
Karsten Hopp 4013be
-- 
Karsten Hopp 4013be
hundred-and-one symptoms of being an internet addict:
Karsten Hopp 4013be
16. You step out of your room and realize that your parents have moved and
Karsten Hopp 4013be
    you don't have a clue when it happened.
Karsten Hopp 4013be
Karsten Hopp 4013be
 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
Karsten Hopp 4013be
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
Karsten Hopp 4013be
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
Karsten Hopp 4013be
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///