circlemud_squared_0.5.153/cnf/
circlemud_squared_0.5.153/etc/
circlemud_squared_0.5.153/etc/etc/
circlemud_squared_0.5.153/etc/house/
circlemud_squared_0.5.153/etc/misc/
circlemud_squared_0.5.153/etc/plralias/A-E/
circlemud_squared_0.5.153/etc/plralias/F-J/
circlemud_squared_0.5.153/etc/plralias/K-O/
circlemud_squared_0.5.153/etc/plralias/P-T/
circlemud_squared_0.5.153/etc/plralias/U-Z/
circlemud_squared_0.5.153/etc/plralias/ZZZ/
circlemud_squared_0.5.153/etc/plrobjs/
circlemud_squared_0.5.153/etc/plrobjs/A-E/
circlemud_squared_0.5.153/etc/plrobjs/F-J/
circlemud_squared_0.5.153/etc/plrobjs/K-O/
circlemud_squared_0.5.153/etc/plrobjs/P-T/
circlemud_squared_0.5.153/etc/plrobjs/U-Z/
circlemud_squared_0.5.153/etc/plrobjs/ZZZ/
circlemud_squared_0.5.153/etc/text/
circlemud_squared_0.5.153/etc/text/help/
circlemud_squared_0.5.153/src/util/
circlemud_squared_0.5.153/src/util/worldconv/
/**
 * @file log.c
 * @ingroup common
 *
 * Logging support
 *
 * @author Part of CircleMUD
 *
 * @par Copyright:
 *   Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University<br>
 *   CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991.
 *
 * @par
 *   All rights reserved.  See license.doc for complete information.
 *
 * @package cs
 * @version 1.0
 */

#define __LOG_C__

#include "base.h"
#include "log.h"

#include "structs.h"
#include "utils.h"
#include "comm.h"
#include "db.h"
#include "screen.h"
#include "room.h"
#include "zone.h"

FILE *logfile;

/**
 * Writes an entry to the log file.
 * @param format the printf-style format specifier string
 * @return none
 */
void basic_mud_log(const char *format, ...) {
    va_list args;
    va_start(args, format);
    basic_mud_vlog(format, args);
    va_end(args);
}

/**
 * Writes an entry to the log file.
 * @param format the printf-style format specifier string
 * @return none
 */
void basic_mud_vlog(const char *format, va_list args) {
    if (logfile == NULL) {
        printf("SYSERR: Using log() before stream was initialized!");
    } else {
        time_t ct = time(0);
        char *time_s = asctime(localtime(&ct));

        if (format == NULL) {
            format = "SYSERR: log() received a NULL format.";
        }

        time_s[strlen(time_s) - 1] = '\0';

        fprintf(logfile, "%-15.15s :: ", time_s + 4);
        vfprintf(logfile, format, args);
        fputc('\n', logfile);
        fflush(logfile);
    }
}

/**
 * Logs when a player is killed by a death trap.
 * @param ch the character who was killed
 * @return none
 */
void log_death_trap(charData_t *ch) {

  mudlog(BRF, AUTH_WIZARD, TRUE, "%s hit death trap in '%s:%d'", GET_NAME(ch), IN_ROOM(ch)->zone->keyword, IN_ROOM(ch)->number);     
}

/**
 * Broadcasts a log message to connected immortals, optionally writing an
 * entry is also written to the log file.
 * @param type the type of log entry
 * @param auth the minimum auth level required to received the broadcast
 * @param file whether the log message should be written to the log file
 * @param str the printf-style format string
 * @return none
 */
void mudlog(int type, int auth, bool file, const char *str, ...) {
  char buf[MAX_STRING_LENGTH];
  descriptorData_t *i = NULL;
  va_list args;

  if (str == NULL)
    return;     /* eh, oh well. */

  if (file) {
    va_start(args, str);
    basic_mud_vlog(str, args);
    va_end(args);
  }

  if (auth < 0)
    return;

  va_start(args, str);
  vsnprintf(buf, sizeof(buf), str, args);
  va_end(args);

  /* Iterate over the descriptor list. */
  for (i = descriptor_list; i; i = i->next) {
    if (STATE(i) != CON_PLAYING || IS_NPC(i->character))
      continue;
    if (GET_AUTH(i->character) < auth)
      continue;
    if (PLR_FLAGGED(i->character, PLR_WRITING))
      continue;
    if (type > (PRF_FLAGGED(i->character, PRF_LOG1) ? 1 : 0) + (PRF_FLAGGED(i->character, PRF_LOG2) ? 2 : 0))
      continue;
    /* Send the log message to the character. */
    send_to_char(i->character, "%s[%s]%s\r\n", CCGRN(i->character, C_NRM),
      buf, CCNRM(i->character, C_NRM));
  }
}