#include "kernel.h" #include <unistd.h> #include <sys/file.h> #include <sys/stat.h> #include <stdio.h> #include <time.h> #ifdef VARGS #include <stdarg.h> #endif #include <errno.h> #include "log.h" int open_logfile (char *logfile, Boolean clear_flag) { int fd; int x = O_WRONLY | O_CREAT; if (clear_flag) x |= O_TRUNC; else x |= O_APPEND; if ((fd = open (logfile, x, S_IRUSR | S_IWUSR)) < 0) { fprintf (stderr, "\n%s: Cannot open logfile %s, program failed.\n", progname, logfile); perror ("open"); return -1; } dup2 (fd, fileno (stderr)); close (fd); return 0; } void close_logfile () { fclose (stderr); } void progerror (char *name) { mudlog ("PERROR %s: [%d] %s", name, errno, sys_errlist[errno]); } #ifdef VARGS void vmudlog (char *format, va_list pvar) { time_t tm_t; char *z, timestr[25]; int pos; time (&tm_t); z = ctime (&tm_t); z[19] = '\0'; #ifdef COMPACT_LOG for (pos = 0; pos < 15; pos++) timestr[pos] = z[pos + 4]; timestr[pos] = '\0'; fprintf (stderr, "%s: ", timestr); #else fprintf (stderr, "%s: ", z); #endif vfprintf (stderr, format, pvar); putc ('\n', stderr); fflush (stderr); } void mudlog (char *format,...) { va_list pvar; va_start (pvar, format); vmudlog (format, pvar); va_end (pvar); } #else void mudlog (format, a1, a2, a3, a4, a5, a6) char *format, *a1, *a2, *a3, *a4, *a5, *a6; { time_t tm_t; char *z, timestr[25]; int pos; time (&tm_t); z = ctime (&tm_t); z[19] = '\0'; #ifdef COMPACT_LOG for (pos = 0; pos < 15; pos++) timestr[pos] = z[pos + 4]; timestr[pos] = '\0'; fprintf (stderr, "%s: ", timestr); #else fprintf (stderr, "%s: ", z); #endif fprintf (stderr, format, a1, a2, a3, a4, a5, a6); putc ('\n', stderr); } #endif /************************************************ * Player Logging * * 1995, Illusion * ************************************************/ void open_plr_log (void) { char filename[100]; sprintf (filename, "%s/%s", LOG_DIR, pname (mynum)); if ((cur_player->log = fopen (filename, "a")) == NULL) { cur_player->logged = False; return; } cur_player->logged = True; write_plr_log ("LOG: Log Started"); mudlog ("MONITOR: Player Log Opened For %s", pname (mynum)); } void close_plr_log (void) { if (cur_player->logged) { write_plr_log ("LOG: Log Closed"); fclose (cur_player->log); cur_player->logged = False; mudlog ("MONITOR: Player Log Closed For %s", pname (mynum)); } } #ifdef VARGS void vwrite_plr_log (char *format, va_list pvar) { time_t tm_t; char *z, timestr[25]; int pos; time (&tm_t); z = ctime (&tm_t); z[19] = '\0'; #ifdef COMPACT_LOG for (pos = 0; pos < 15; pos++) timestr[pos] = z[pos + 4]; timestr[pos] = '\0'; fprintf (cur_player->log, "%s: ", timestr); #else fprintf (cur_player->log, "%s: ", z); #endif vfprintf (cur_player->log, format, pvar); putc ('\n', cur_player->log); } void write_plr_log (char *format,...) { va_list pvar; if (!cur_player->logged) return; va_start (pvar, format); vwrite_plr_log (format, pvar); va_end (pvar); fflush (cur_player->log); } #else void write_plr_log (format, a1, a2, a3, a4, a5, a6) char *format, *a1, *a2, *a3, *a4, *a5, *a6; { time_t tm_t; char *z, timestr[25]; int pos; if (!cur_player->logged) return; time (&tm_t); z = ctime (&tm_t); z[19] = '\0'; #ifdef COMPACT_LOG for (pos = 0; pos < 15; pos++) timestr[pos] = z[pos + 4]; timestr[pos] = '\0'; fprintf (cur_player->log, "%s: ", timestr); #else fprintf (cur_player->log, "%s: ", z); #endif fprintf (cur_player->log, format, a1, a2, a3, a4, a5, a6); putc ('\n', cur_player->log); fflush (cur_player->log); } #endif