=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mg/search.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- src/usr.bin/mg/search.c 2005/04/03 02:09:28 1.12 +++ src/usr.bin/mg/search.c 2005/05/23 20:39:44 1.13 @@ -1,4 +1,4 @@ -/* $OpenBSD: search.c,v 1.12 2005/04/03 02:09:28 db Exp $ */ +/* $OpenBSD: search.c,v 1.13 2005/05/23 20:39:44 jason Exp $ */ /* * Search commands. @@ -37,7 +37,7 @@ static int is_find(int); static void is_prompt(int, int, int); static void is_dspl(char *, int); -static int eq(int, int); +static int eq(int, int, int); static SRCHCOM cmds[NSRCH]; static int cip; @@ -542,11 +542,14 @@ forwsrch(void) { LINE *clp, *tlp; - int cbo, tbo, c; + int cbo, tbo, c, i, xcase = 0; char *pp; clp = curwp->w_dotp; cbo = curwp->w_doto; + for (i = 0; pat[i]; i++) + if (ISUPPER(CHARMASK(pat[i]))) + xcase = 1; for (;;) { if (cbo == llength(clp)) { if ((clp = lforw(clp)) == curbp->b_linep) @@ -555,7 +558,7 @@ c = CCHR('J'); } else c = lgetc(clp, cbo++); - if (eq(c, pat[0]) != FALSE) { + if (eq(c, pat[0], xcase) != FALSE) { tlp = clp; tbo = cbo; pp = &pat[1]; @@ -568,7 +571,7 @@ c = CCHR('J'); } else c = lgetc(tlp, tbo++); - if (eq(c, *pp++) == FALSE) + if (eq(c, *pp++, xcase) == FALSE) goto fail; } curwp->w_dotp = tlp; @@ -591,12 +594,15 @@ backsrch(void) { LINE *clp, *tlp; - int cbo, tbo, c; + int cbo, tbo, c, i, xcase = 0; char *epp, *pp; for (epp = &pat[0]; epp[1] != 0; ++epp); clp = curwp->w_dotp; cbo = curwp->w_doto; + for (i = 0; pat[i]; i++) + if (ISUPPER(CHARMASK(pat[i]))) + xcase = 1; for (;;) { if (cbo == 0) { clp = lback(clp); @@ -608,7 +614,7 @@ c = CCHR('J'); else c = lgetc(clp, cbo); - if (eq(c, *epp) != FALSE) { + if (eq(c, *epp, xcase) != FALSE) { tlp = clp; tbo = cbo; pp = epp; @@ -623,7 +629,7 @@ c = CCHR('J'); else c = lgetc(tlp, tbo); - if (eq(c, *--pp) == FALSE) + if (eq(c, *--pp, xcase) == FALSE) goto fail; } curwp->w_dotp = tlp; @@ -641,12 +647,14 @@ * folded out. The "pc" is from the pattern. */ static int -eq(int bc, int pc) +eq(int bc, int pc, int xcase) { bc = CHARMASK(bc); pc = CHARMASK(pc); if (bc == pc) return (TRUE); + if (xcase) + return (FALSE); if (ISUPPER(bc)) return (TOLOWER(bc) == pc); if (ISUPPER(pc))