From 6be2e3f8c51a4669c584875fb2e6d69f8a5b5cc2 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Wed, 30 Jul 2008 08:26:34 -0400 Subject: [PATCH] Journal output lines instead of chunks 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 | 2 +- src/lib/subs/journal.c | 28 +++++++++++++++++++++++++--- src/lib/subs/pr.c | 6 ++++-- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/include/journal.h b/include/journal.h index d2029d30b..d2ee21593 100644 --- a/include/journal.h +++ b/include/journal.h @@ -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); diff --git a/src/lib/subs/journal.c b/src/lib/subs/journal.c index 56361e971..3fafb6bf1 100644 --- a/src/lib/subs/journal.c +++ b/src/lib/subs/journal.c @@ -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 diff --git a/src/lib/subs/pr.c b/src/lib/subs/pr.c index a5c2a20fa..ff56f893f 100644 --- a/src/lib/subs/pr.c +++ b/src/lib/subs/pr.c @@ -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; } -- 2.43.0