/*
// ColdMUD was created and is copyright 1993, 1994 by Greg Hudson
//
// ColdX is a derivitive work, and is copyright 1995 by the ColdX Project.
// Full copyright information can be found in the file doc/CREDITS
//
// File:        log.c
// Version:     0.1-5
// Last Edited: 30 Jul 1995
//
// ---
//
// Procedures to handle logging and fatal errors.
*/

#define _POSIX_SOURCE

#include <stdio.h>
#include <sys/types.h>
/*#include <time.h>*/
#include <stdarg.h>
#include "log.h"
#include "dump.h"
#include "cmstring.h"
#include "util.h"

#define STRFTIME

void panic(char *s) {
    static int panic_state = 0;

    fprintf(stderr, "[%s] %s: %s\n", timestamp(NULL),
            (panic_state ? "RECURSIVE PANIC" : "PANIC"), s);

    if (!panic_state) {
	panic_state = 1;
        fprintf(stderr, "[%s] doing binary dump...", timestamp(NULL));
	binary_dump();
        fputs("Done\n", stderr);
    }
    exit(1);
}

void abort(void)
{
  panic("Aborted");
  exit(1);  /* Never reached.  Avoids warnings on some compilers, tho */
}

void fail_to_start(char *s)
{
    fprintf(stderr, "[%s] FAILED TO START: %s\n", timestamp(NULL), s);

    exit(1);
}

void write_log(char *fmt, ...)
{
    va_list arg;
    String *str;

    va_start(arg, fmt);

    str = vformat(fmt, arg);

    fputs(string_chars(str), stdout);
    fputc('\n', stdout);

    fflush(stdout);

    string_discard(str);
    va_end(arg);
}

void write_err(char *fmt, ...)
{
    va_list arg;
    String *str;

    va_start(arg, fmt);
    str = vformat(fmt, arg);
    va_end(arg);

    fprintf(stderr, "[%s] %s\n", timestamp(NULL), string_chars(str));
    fflush(stderr);

    string_discard(str);
}