00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 #include <config.h>
00050
00051 #include <ctype.h>
00052 #include <errno.h>
00053 #include <stdarg.h>
00054 #include <stdio.h>
00055 #include <time.h>
00056 #include "misc.h"
00057 #include "empthread.h"
00058 #include "journal.h"
00059 #include "optlist.h"
00060 #include "player.h"
00061 #include "prototypes.h"
00062
00063 static char journal_fname[] = "journal.log";
00064 static FILE *journal;
00065
00066 static FILE *
00067 journal_open(void)
00068 {
00069 return fopen(journal_fname, "a+");
00070 }
00071
00072 static void
00073 journal_entry(char *fmt, ...)
00074 {
00075 static char buf[1024];
00076 va_list ap;
00077 time_t now;
00078 unsigned char *p;
00079
00080 if (journal) {
00081 time(&now);
00082 fprintf(journal, "%.24s %p ", ctime(&now), empth_self());
00083
00084 va_start(ap, fmt);
00085 vsnprintf(buf, sizeof(buf) - 1, fmt, ap);
00086 va_end(ap);
00087
00088 for (p = (unsigned char *)buf; *p; p++) {
00089 if (isprint(*p))
00090 putc(*p, journal);
00091 else
00092 fprintf(journal, "\\%03o", *p);
00093 }
00094 fputs("\n", journal);
00095 if (debug)
00096 fflush(journal);
00097 if (ferror(journal)) {
00098 logerror("Error writing journal (%s)", strerror(errno));
00099 clearerr(journal);
00100 }
00101 }
00102 }
00103
00104 int
00105 journal_startup(void)
00106 {
00107 if (!keep_journal)
00108 return 0;
00109 journal = journal_open();
00110 if (!journal) {
00111 logerror("Can't open %s (%s)", journal_fname, strerror(errno));
00112 return -1;
00113 }
00114 journal_entry("startup");
00115 return 0;
00116 }
00117
00118 void
00119 journal_shutdown(void)
00120 {
00121 journal_entry("shutdown");
00122 if (journal) {
00123 fclose(journal);
00124 journal = NULL;
00125 }
00126 }
00127
00128 int
00129 journal_reopen(void)
00130 {
00131 FILE *j;
00132
00133 if (!keep_journal)
00134 return 0;
00135 j = journal_open();
00136 if (!j) {
00137 logerror("Can't open %s (%s)", journal_fname, strerror(errno));
00138 return -1;
00139 }
00140 if (journal)
00141 fclose(journal);
00142 journal = j;
00143 return 0;
00144 }
00145
00146 void
00147 journal_login(void)
00148 {
00149 journal_entry("login %d %s %s",
00150 player->cnum, player->hostaddr, player->userid);
00151 }
00152
00153 void
00154 journal_logout(void)
00155 {
00156 journal_entry("logout %d", player->cnum);
00157 }
00158
00159 void
00160 journal_input(char *input)
00161 {
00162 journal_entry("input %s", input);
00163 }
00164
00165 void
00166 journal_update(int etu)
00167 {
00168 journal_entry("update %d", etu);
00169 }