idirt-1.82d/
idirt-1.82d/bin/
idirt-1.82d/data/LOGS/
idirt-1.82d/data/POLICY/
idirt-1.82d/data/WIZ_ZONES/
idirt-1.82d/doc/
idirt-1.82d/doc/info/
idirt-1.82d/doc/manual/
idirt-1.82d/src/Ident/
idirt-1.82d/src/utils/
idirt-1.82d/utils/
#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