This enables using a and i commands in a global command because the input is not anymore taken from stdin. --- ed.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-)
diff --git a/ed.c b/ed.c index 7881fba..ad6c81a 100644 --- a/ed.c +++ b/ed.c @@ -686,6 +686,15 @@ getinput(void) } } +static int +moreinput(void) +{ + if (!uflag) + return cmdline.str[inputidx] != '\0'; + + getinput(); + return 1; +} static void dowrite(const char *, int); @@ -870,7 +879,7 @@ dohelp(void) static void chkprint(int flag) { - char c; + int c; if (flag) { if ((c = input()) == 'p' || c == 'l' || c == 'n') @@ -878,7 +887,7 @@ chkprint(int flag) else back(c); } - if (input() != '\0') + if ((c = input()) != '\0' && c != '\n') error("invalid command suffix"); } @@ -913,16 +922,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, NULL); + 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 -- 2.37.3