projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
added sccs, Bill put in more buffers
[unix-history]
/
usr
/
src
/
usr.bin
/
ex
/
ex_voper.c
diff --git
a/usr/src/usr.bin/ex/ex_voper.c
b/usr/src/usr.bin/ex/ex_voper.c
index
f65d7b2
..
63bf53c
100644
(file)
--- a/
usr/src/usr.bin/ex/ex_voper.c
+++ b/
usr/src/usr.bin/ex/ex_voper.c
@@
-27,6
+27,7
@@
operate(c, cnt)
bool subop = 0;
char *oglobp, *ocurs;
register line *addr;
bool subop = 0;
char *oglobp, *ocurs;
register line *addr;
+ line *odot;
static char lastFKND, lastFCHR;
char d;
static char lastFKND, lastFCHR;
char d;
@@
-105,11
+106,13
@@
operate(c, cnt)
*/
case 'r':
vrep(cnt);
*/
case 'r':
vrep(cnt);
+ vmacchng(1);
return;
default:
goto nocount;
}
return;
default:
goto nocount;
}
+ vmacchng(1);
/*
* Had an operator, so accept another count.
* Multiply counts together.
/*
* Had an operator, so accept another count.
* Multiply counts together.
@@
-259,7
+262,7
@@
ein:
case ',':
forbid (lastFKND == 0);
c = isupper(lastFKND) ? tolower(lastFKND) : toupper(lastFKND);
case ',':
forbid (lastFKND == 0);
c = isupper(lastFKND) ? tolower(lastFKND) : toupper(lastFKND);
-
ungetkey(lastFCHR)
;
+
i = lastFCHR
;
if (vglobp == 0)
vglobp = "";
subop++;
if (vglobp == 0)
vglobp = "";
subop++;
@@
-279,7
+282,7
@@
ein:
case ';':
forbid (lastFKND == 0);
c = lastFKND;
case ';':
forbid (lastFKND == 0);
c = lastFKND;
-
ungetkey(lastFCHR)
;
+
i = lastFCHR
;
subop++;
goto nocount;
subop++;
goto nocount;
@@
-298,11
+301,12
@@
ein:
*/
case 'f': /* find */
case 't':
*/
case 'f': /* find */
case 't':
- i
= getesc();
- if (i == 0)
- return;
- if (!subop)
+ i
f (!subop) {
+ i = getesc();
+ if (i == 0)
+ return;
*lastcp++ = i;
*lastcp++ = i;
+ }
if (vglobp == 0)
lastFKND = c, lastFCHR = i;
for (; cnt > 0; cnt--)
if (vglobp == 0)
lastFKND = c, lastFCHR = i;
for (; cnt > 0; cnt--)
@@
-411,6
+415,7
@@
deleteit:
case 'x':
if (margin())
goto errlab;
case 'x':
if (margin())
goto errlab;
+ vmacchng(1);
while (cnt > 0 && !margin())
wcursor += dir, cnt--;
opf = deleteop;
while (cnt > 0 && !margin())
wcursor += dir, cnt--;
opf = deleteop;
@@
-597,13
+602,17
@@
errlab:
vsetsiz(Xcnt);
vsave();
ocurs = cursor;
vsetsiz(Xcnt);
vsave();
ocurs = cursor;
+ odot = dot;
wcursor = 0;
if (readecho(c))
return;
if (!vglobp)
vscandir[0] = genbuf[0];
oglobp = globp; CP(vutmp, genbuf); globp = vutmp;
wcursor = 0;
if (readecho(c))
return;
if (!vglobp)
vscandir[0] = genbuf[0];
oglobp = globp; CP(vutmp, genbuf); globp = vutmp;
- d = peekc; ungetchar(0); fixech();
+ d = peekc;
+fromsemi:
+ ungetchar(0);
+ fixech();
CATCH
#ifndef CBREAK
/*
CATCH
#ifndef CBREAK
/*
@@
-619,7
+628,10
@@
errlab:
#ifndef CBREAK
vraw();
#endif
#ifndef CBREAK
vraw();
#endif
+slerr:
globp = oglobp;
globp = oglobp;
+ dot = odot;
+ cursor = ocurs;
ungetchar(d);
splitw = 0;
vclean();
ungetchar(d);
splitw = 0;
vclean();
@@
-630,6
+642,14
@@
errlab:
globp = "";
else if (peekc)
--globp;
globp = "";
else if (peekc)
--globp;
+ if (*globp == ';') {
+ /* /foo/;/bar/ */
+ globp++;
+ dot = addr;
+ cursor = loc1;
+ goto fromsemi;
+ }
+ dot = odot;
ungetchar(d);
c = 0;
if (*globp == 'z')
ungetchar(d);
c = 0;
if (*globp == 'z')
@@
-639,8
+659,13
@@
errlab:
i = 0;
while (isdigit(*globp))
i = i * 10 + *globp++ - '0';
i = 0;
while (isdigit(*globp))
i = i * 10 + *globp++ - '0';
- if (
*globp
)
+ if (
any(*globp, "^+-.")
)
c = *globp++;
c = *globp++;
+ if (*globp) {
+ /* random junk after the pattern */
+ beep();
+ goto slerr;
+ }
globp = oglobp;
splitw = 0;
vmoving = 0;
globp = oglobp;
splitw = 0;
vmoving = 0;