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);
static char journal_fname[] = "journal.log";
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)
{
}
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
if (p->curid >= 0) {
io_puts(p->iop, "\n");
+ journal_output(p, "\n");
p->curid = -1;
}
va_start(ap, format);
bp += len;
}
}
- journal_output(pl, id, buf);
+ journal_output(pl, buf);
}
/*
io_puts(pl->iop, printbuf);
}
}
- journal_output(pl, id, buf);
+ journal_output(pl, buf);
}
/*
buf[1] = ' ';
buf[2] = '\0';
io_puts(pl->iop, buf);
+ journal_output(pl, buf);
pl->curid = n;
}