* prng NAME SEED
* login CNUM HOSTADDR USER
* logout CNUM
+ * command NAME
* input INPUT
+ * output THREAD ID OUTPUT
* update ETU
*/
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)
fprintf(journal, "\\%03o", *p);
}
fputs("\n", journal);
- fflush(journal);
+ if (fmt[0] != 'o') /* FIXME disgusting hack */
+ fflush(journal);
if (ferror(journal)) {
logerror("Error writing journal (%s)", strerror(errno));
clearerr(journal);
journal_entry("logout %d", player->cnum);
}
+void
+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 %s%.*s",
+ pl->cnum, buf1, buf2prec, buf2);
+ else
+ journal_entry("output %p %s%.*s",
+ pl, buf1, buf2prec, buf2);
+}
+
void
journal_input(char *input)
{
journal_entry("input %s", input);
}
+void
+journal_command(char *cmd)
+{
+ char *eptr = strchr(cmd, ' ');
+ journal_entry("command %.*s", eptr ? (int)(eptr - cmd) : -1, cmd);
+}
+
void
journal_update(int etu)
{