]> git.pond.sub.org Git - empserver/commitdiff
Journal output lines instead of chunks
authorMarkus Armbruster <armbru@pond.sub.org>
Wed, 30 Jul 2008 12:26:34 +0000 (08:26 -0400)
committerMarkus Armbruster <armbru@pond.sub.org>
Tue, 26 Jan 2010 21:44:20 +0000 (22:44 +0100)
Output often arrives in chunks other than lines.  Hard to read in the
journal.  Delay journalling until we got a full line or our buffer is
exhausted.  This is less precise, but it'll do for now.

include/journal.h
src/lib/subs/journal.c
src/lib/subs/pr.c

index d2029d30b6656f98a10770706311fb0d47932f86..d2ee2159386cf265b53c4532f1b1de83638ba013 100644 (file)
@@ -42,7 +42,7 @@ int journal_reopen(void);
 void journal_login(void);
 void journal_logout(void);
 void journal_prng(unsigned);
-void journal_output(struct player *, int, char *);
+void journal_output(struct player *, char *);
 void journal_input(char *);
 void journal_command(char *);
 void journal_update(int);
index 56361e971541177d3b38f80c1bcfa35b103a2dfa..3fafb6bf1469368033bac35e5cf8171c7574ecd6 100644 (file)
@@ -69,6 +69,7 @@ static FILE *journal;
 
 static void journal_entry(char *fmt, ...)
     ATTRIBUTE((format (printf, 1, 2)));
+static void journal_output_1(struct player *, char *, char *, int);
 
 static FILE *
 journal_open(void)
@@ -171,14 +172,35 @@ journal_logout(void)
 }
 
 void
-journal_output(struct player *pl, int id, char *output)
+journal_output(struct player *pl, char *output)
 {
+    static char buf[1024];
+    char *s, *e;
+
     if (keep_journal < 2)
        return;
+
+    for (s = output; (e = strchr(s, '\n')); s = e + 1) {
+       journal_output_1(pl, buf, s, (int)(e + 1 - s));
+       buf[0] = 0;
+    }
+    if (strlen(buf) + strlen(s) < 1024)
+       strcpy(buf + strlen(buf), s);
+    else {
+       journal_output_1(pl, buf, s, -1);
+       buf[0] = 0;
+    }
+}
+
+void
+journal_output_1(struct player *pl, char *buf1, char *buf2, int buf2prec)
+{
     if (pl && pl->state == PS_PLAYING)
-       journal_entry("output %d %d %s", pl->cnum, id, output);
+       journal_entry("output %d %s%.*s",
+                     pl->cnum, buf1, buf2prec, buf2);
     else
-       journal_entry("output %p %d %s", pl, id, output);
+       journal_entry("output %p %s%.*s",
+                     pl, buf1, buf2prec, buf2);
 }
 
 void
index a5c2a20faaa8db7c0a60bcf4b6b5b239e099b8f9..ff56f893fce03d09b68613e05664eb290df5a6ea 100644 (file)
@@ -125,6 +125,7 @@ pr_id(struct player *p, int id, char *format, ...)
 
     if (p->curid >= 0) {
        io_puts(p->iop, "\n");
+       journal_output(p, "\n");
        p->curid = -1;
     }
     va_start(ap, format);
@@ -243,7 +244,7 @@ pr_player(struct player *pl, int id, char *buf)
        }
     }
 
-    journal_output(pl, id, buf);
+    journal_output(pl, buf);
 
     if (player == pl) {
        while (io_output_if_queue_long(pl->iop,
@@ -301,7 +302,7 @@ upr_player(struct player *pl, int id, char *buf)
        }
     }
 
-    journal_output(pl, id, buf);
+    journal_output(pl, buf);
 
     if (player == pl) {
        while (io_output_if_queue_long(pl->iop,
@@ -329,6 +330,7 @@ outid(struct player *pl, int n)
     buf[1] = ' ';
     buf[2] = '\0';
     io_puts(pl->iop, buf);
+    journal_output(pl, buf);
     pl->curid = n;
 }