commit ebf740f96244497b003b65e56a4f147b7f7b956a
parent 9781959581c4c150decd0c7cbc325da23eb009d3
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date: Sun, 4 Mar 2018 17:10:17 +0100
Improve doglobal()
Don't use directly the line numbers and call to getlst()
when a line is matched.
Diffstat:
M | ed.c | | | 30 | ++++++++++++++++++------------ |
1 file changed, 18 insertions(+), 12 deletions(-)
diff --git a/ed.c b/ed.c
@@ -1318,7 +1318,7 @@ chkglobal(void)
static void
doglobal(void)
{
- int i, k;
+ int cnt, ln, k;
skipblank();
cmdline.siz = 0;
@@ -1326,18 +1326,24 @@ doglobal(void)
if (uflag)
chkprint(0);
- for (i = 1; i <= lastln; i++) {
- k = getindex(i);
- if (!zero[k].global)
- continue;
- curln = i;
- nlines = 0;
- if (uflag) {
- line1 = line2 = i;
- pflag = 0;
- doprint();
+ ln = line1;
+ for (cnt = 0; cnt < lastln; ) {
+ k = getindex(ln);
+ if (zero[k].global) {
+ zero[k].global = 0;
+ curln = ln;
+ nlines = 0;
+ if (uflag) {
+ line1 = line2 = ln;
+ pflag = 0;
+ doprint();
+ }
+ getlst();
+ docmd();
+ } else {
+ cnt++;
+ ln = nextln(ln);
}
- docmd();
}
discard(); /* cover the case of not matching anything */
}