Introduction
Introduction Statistics Contact Development Disclaimer Help
ed: Read from input in append() - sbase - suckless unix tools
git clone git://git.suckless.org/sbase
Log
Files
Refs
README
LICENSE
---
commit b089261c3a7bdc6fb1efd84b7f097667d9f1fced
parent 1e10bf6069f472637450f3f1f1933b73dff88a83
Author: Roberto E. Vargas Caballero <[email protected]>
Date: Mon, 27 Nov 2023 09:21:13 +0100
ed: Read from input in append()
This enables using a and i commands in a global command
because the input is not anymore taken from stdin.
Diffstat:
M ed.c | 30 ++++++++++++++++++++++--------
1 file changed, 22 insertions(+), 8 deletions(-)
---
diff --git a/ed.c b/ed.c
@@ -692,6 +692,15 @@ getinput(void)
}
}
+static int
+moreinput(void)
+{
+ if (!uflag)
+ return cmdline.str[inputidx] != '\0';
+
+ getinput();
+ return 1;
+}
static void dowrite(const char *, int);
@@ -876,7 +885,7 @@ dohelp(void)
static void
chkprint(int flag)
{
- char c;
+ int c;
if (flag) {
if ((c = input()) == 'p' || c == 'l' || c == 'n')
@@ -884,7 +893,7 @@ chkprint(int flag)
else
back(c);
}
- if (input() != '\0')
+ if ((c = input()) != '\0' && c != '\n')
error("invalid command suffix");
}
@@ -919,16 +928,21 @@ getfname(int comm)
static void
append(int num)
{
- char *s = NULL;
- size_t len = 0;
+ int ch;
+ static String line;
curln = num;
- while (getline(&s, &len, stdin) > 0) {
- if (*s == '.' && s[1] == '\n')
+ while (moreinput()) {
+ string(&line);
+ while ((ch = input()) != '\n' && ch != '\0')
+ addchar(ch, &line);
+ addchar('\n', &line);
+ addchar('\0', &line);
+
+ if (!strcmp(line.str, ".\n") || !strcmp(line.str, "."))
break;
- inject(s, AFTER);
+ inject(line.str, AFTER);
}
- free(s);
}
static void
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.