=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mg/search.c,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- src/usr.bin/mg/search.c 2006/05/28 23:30:16 1.29 +++ src/usr.bin/mg/search.c 2006/06/01 09:00:50 1.30 @@ -1,4 +1,4 @@ -/* $OpenBSD: search.c,v 1.29 2006/05/28 23:30:16 kjell Exp $ */ +/* $OpenBSD: search.c,v 1.30 2006/06/01 09:00:50 kjell Exp $ */ /* This file is in the public domain. */ @@ -164,6 +164,7 @@ int xcase; int i; char opat[NPAT]; + int cdotline; #ifndef NO_MACRO if (macrodef) { @@ -179,6 +180,7 @@ pptr = -1; clp = curwp->w_dotp; cbo = curwp->w_doto; + cdotline = curwp->w_dotline; is_lpush(); is_cpush(SRCH_BEGIN); success = TRUE; @@ -212,6 +214,7 @@ } curwp->w_dotp = clp; curwp->w_doto = cbo; + curwp->w_dotline = cdotline; curwp->w_flag |= WFMOVE; srch_lastdir = dir; (void)ctrlg(FFRAND, 0); @@ -230,6 +233,7 @@ clp = lforw(curbp->b_linep); curwp->w_dotp = clp; curwp->w_doto = 0; + curwp->w_dotline = 1; if (is_find(dir) != FALSE) { is_cpush(SRCH_MARK); success = TRUE; @@ -262,6 +266,7 @@ curwp->w_dotp = clp; curwp->w_doto = llength(curwp->w_dotp); + curwp->w_dotline = curwp->w_bufp->b_lines; if (is_find(dir) != FALSE) { is_cpush(SRCH_MARK); success = TRUE; @@ -651,9 +656,11 @@ struct line *clp, *tlp; int cbo, tbo, c, i, xcase = 0; char *pp; + int nline; clp = curwp->w_dotp; cbo = curwp->w_doto; + nline = curwp->w_dotline; for (i = 0; pat[i]; i++) if (ISUPPER(CHARMASK(pat[i]))) xcase = 1; @@ -661,6 +668,7 @@ if (cbo == llength(clp)) { if ((clp = lforw(clp)) == curbp->b_linep) break; + nline++; cbo = 0; c = CCHR('J'); } else @@ -676,13 +684,18 @@ goto fail; tbo = 0; c = CCHR('J'); - } else + if (eq(c, *pp++, xcase) == FALSE) + goto fail; + nline++; + } else { c = lgetc(tlp, tbo++); - if (eq(c, *pp++, xcase) == FALSE) - goto fail; + if (eq(c, *pp++, xcase) == FALSE) + goto fail; + } } curwp->w_dotp = tlp; curwp->w_doto = tbo; + curwp->w_dotline = nline; curwp->w_flag |= WFMOVE; return (TRUE); } @@ -703,10 +716,12 @@ struct line *clp, *tlp; int cbo, tbo, c, i, xcase = 0; char *epp, *pp; + int nline; for (epp = &pat[0]; epp[1] != 0; ++epp); clp = curwp->w_dotp; cbo = curwp->w_doto; + nline = curwp->w_dotline; for (i = 0; pat[i]; i++) if (ISUPPER(CHARMASK(pat[i]))) xcase = 1; @@ -715,6 +730,7 @@ clp = lback(clp); if (clp == curbp->b_linep) return (FALSE); + nline--; cbo = llength(clp) + 1; } if (--cbo == llength(clp)) @@ -730,6 +746,7 @@ tlp = lback(tlp); if (tlp == curbp->b_linep) goto fail; + nline--; tbo = llength(tlp) + 1; } if (--tbo == llength(tlp)) @@ -741,6 +758,7 @@ } curwp->w_dotp = tlp; curwp->w_doto = tbo; + curwp->w_dotline = nline; curwp->w_flag |= WFMOVE; return (TRUE); }