Fix journalling of output ids

This commit is contained in:
Markus Armbruster 2008-08-02 09:04:16 -04:00
parent 59bdc1cbcc
commit 342ab5c22a
3 changed files with 26 additions and 17 deletions

View file

@ -42,7 +42,7 @@ int journal_reopen(void);
void journal_login(void); void journal_login(void);
void journal_logout(void); void journal_logout(void);
void journal_prng(unsigned); void journal_prng(unsigned);
void journal_output(struct player *, char *); void journal_output(struct player *, int, char *);
void journal_input(char *); void journal_input(char *);
void journal_command(char *); void journal_command(char *);
void journal_update(int); void journal_update(int);

View file

@ -67,7 +67,7 @@ static char journal_fname[] = "journal.log";
static FILE *journal; static FILE *journal;
static void journal_entry(char *fmt, ...) ATTRIBUTE((format (printf, 1, 2))); static void journal_entry(char *fmt, ...) ATTRIBUTE((format (printf, 1, 2)));
static void journal_output_1(struct player *, char *, char *, int); static void journal_output_1(struct player *, int, char *, char *, int);
static FILE * static FILE *
journal_open(void) journal_open(void)
@ -173,35 +173,45 @@ journal_logout(void)
} }
void void
journal_output(struct player *pl, char *output) journal_output(struct player *pl, int id, char *output)
{ {
static char buf[1024]; static char buf[1024];
static struct player *bpl;
static int bid;
char *s, *e; char *s, *e;
if (keep_journal < 2) if (keep_journal < 2)
return; return;
for (s = output; (e = strchr(s, '\n')); s = e + 1) { if (buf[0] && (pl != bpl && id != bid)) {
journal_output_1(pl, buf, s, (int)(e + 1 - s)); journal_output_1(bpl, bid, buf, "", -1);
buf[0] = 0; buf[0] = 0;
} }
if (strlen(buf) + strlen(s) < 1024)
for (s = output; (e = strchr(s, '\n')); s = e + 1) {
journal_output_1(pl, id, buf, s, (int)(e + 1 - s));
buf[0] = 0;
}
if (strlen(buf) + strlen(s) < 1024) {
strcpy(buf + strlen(buf), s); strcpy(buf + strlen(buf), s);
else { bpl = pl;
journal_output_1(pl, buf, s, -1); bid = id;
} else {
journal_output_1(pl, id, buf, s, -1);
buf[0] = 0; buf[0] = 0;
} }
} }
void void
journal_output_1(struct player *pl, char *buf1, char *buf2, int buf2prec) journal_output_1(struct player *pl, int id,
char *buf1, char *buf2, int buf2prec)
{ {
if (pl && pl->state == PS_PLAYING) if (pl && pl->state == PS_PLAYING)
journal_entry("output %d %s%.*s", journal_entry("output %d %d %s%.*s",
pl->cnum, buf1, buf2prec, buf2); pl->cnum, id, buf1, buf2prec, buf2);
else else
journal_entry("output %p %s%.*s", journal_entry("output %p %id %s%.*s",
pl, buf1, buf2prec, buf2); pl, id, buf1, buf2prec, buf2);
} }
void void

View file

@ -125,7 +125,7 @@ pr_id(struct player *p, int id, char *format, ...)
if (p->curid >= 0) { if (p->curid >= 0) {
io_puts(p->iop, "\n"); io_puts(p->iop, "\n");
journal_output(p, "\n"); journal_output(p, p->curid, "\n");
p->curid = -1; p->curid = -1;
} }
va_start(ap, format); va_start(ap, format);
@ -247,7 +247,7 @@ pr_player(struct player *pl, int id, char *buf)
bp += len; bp += len;
} }
} }
journal_output(pl, buf); journal_output(pl, id, buf);
} }
/* /*
@ -302,7 +302,7 @@ upr_player(struct player *pl, int id, char *buf)
io_puts(pl->iop, printbuf); io_puts(pl->iop, printbuf);
} }
} }
journal_output(pl, buf); journal_output(pl, id, buf);
} }
/* /*
@ -324,7 +324,6 @@ outid(struct player *pl, int n)
buf[1] = ' '; buf[1] = ' ';
buf[2] = '\0'; buf[2] = '\0';
io_puts(pl->iop, buf); io_puts(pl->iop, buf);
journal_output(pl, buf);
pl->curid = n; pl->curid = n;
} }