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


Reply via email to