148 lines
4.2 KiB
C
148 lines
4.2 KiB
C
/* NetHack 3.6 sys.c $NHDT-Date: 1547118632 2019/01/10 11:10:32 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.43 $ */
|
|
/* Copyright (c) Kenneth Lorber, Kensington, Maryland, 2008. */
|
|
/* NetHack may be freely redistributed. See license for details. */
|
|
|
|
#include "hack.h"
|
|
|
|
#ifndef SYSCF
|
|
/* !SYSCF configurations need '#define DEBUGFILES "foo.c bar.c"'
|
|
* to enable debugging feedback for source files foo.c and bar.c;
|
|
* to activate debugpline(), set an appropriate value and uncomment
|
|
*/
|
|
/* # define DEBUGFILES "*" */
|
|
|
|
/* note: DEBUGFILES value here or in sysconf.DEBUGFILES can be overridden
|
|
at runtime by setting up a value for "DEBUGFILES" in the environment */
|
|
#endif
|
|
|
|
struct sysopt sysopt;
|
|
|
|
void
|
|
sys_early_init()
|
|
{
|
|
sysopt.support = (char *) 0;
|
|
sysopt.recover = (char *) 0;
|
|
#ifdef SYSCF
|
|
sysopt.wizards = (char *) 0;
|
|
#else
|
|
sysopt.wizards = dupstr(WIZARD_NAME);
|
|
#endif
|
|
#if defined(SYSCF) || !defined(DEBUGFILES)
|
|
sysopt.debugfiles = (char *) 0;
|
|
#else
|
|
sysopt.debugfiles = dupstr(DEBUGFILES);
|
|
#endif
|
|
#ifdef DUMPLOG
|
|
sysopt.dumplogfile = (char *) 0;
|
|
#endif
|
|
sysopt.env_dbgfl = 0; /* haven't checked getenv("DEBUGFILES") yet */
|
|
sysopt.shellers = (char *) 0;
|
|
sysopt.explorers = (char *) 0;
|
|
sysopt.genericusers = (char *) 0;
|
|
sysopt.maxplayers = 0; /* XXX eventually replace MAX_NR_OF_PLAYERS */
|
|
sysopt.bones_pools = 0;
|
|
|
|
/* record file */
|
|
sysopt.persmax = PERSMAX;
|
|
sysopt.entrymax = ENTRYMAX;
|
|
sysopt.pointsmin = POINTSMIN;
|
|
sysopt.pers_is_uid = PERS_IS_UID;
|
|
sysopt.tt_oname_maxrank = 10;
|
|
|
|
/* sanity checks */
|
|
if (PERSMAX < 1)
|
|
sysopt.persmax = 1;
|
|
if (ENTRYMAX < 10)
|
|
sysopt.entrymax = 10;
|
|
if (POINTSMIN < 1)
|
|
sysopt.pointsmin = 1;
|
|
if (PERS_IS_UID != 0 && PERS_IS_UID != 1)
|
|
panic("config error: PERS_IS_UID must be either 0 or 1");
|
|
|
|
#ifdef PANICTRACE
|
|
/* panic options */
|
|
sysopt.gdbpath = dupstr(GDBPATH);
|
|
sysopt.greppath = dupstr(GREPPATH);
|
|
#ifdef BETA
|
|
sysopt.panictrace_gdb = 1;
|
|
#ifdef PANICTRACE_LIBC
|
|
sysopt.panictrace_libc = 2;
|
|
#endif
|
|
#else
|
|
sysopt.panictrace_gdb = 0;
|
|
#ifdef PANICTRACE_LIBC
|
|
sysopt.panictrace_libc = 0;
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
sysopt.check_save_uid = 1;
|
|
sysopt.check_plname = 0;
|
|
sysopt.seduce = 1; /* if it's compiled in, default to on */
|
|
sysopt_seduce_set(sysopt.seduce);
|
|
return;
|
|
}
|
|
|
|
void
|
|
sysopt_release()
|
|
{
|
|
if (sysopt.support)
|
|
free((genericptr_t) sysopt.support), sysopt.support = (char *) 0;
|
|
if (sysopt.recover)
|
|
free((genericptr_t) sysopt.recover), sysopt.recover = (char *) 0;
|
|
if (sysopt.wizards)
|
|
free((genericptr_t) sysopt.wizards), sysopt.wizards = (char *) 0;
|
|
if (sysopt.explorers)
|
|
free((genericptr_t) sysopt.explorers), sysopt.explorers = (char *) 0;
|
|
if (sysopt.shellers)
|
|
free((genericptr_t) sysopt.shellers), sysopt.shellers = (char *) 0;
|
|
if (sysopt.debugfiles)
|
|
free((genericptr_t) sysopt.debugfiles),
|
|
sysopt.debugfiles = (char *) 0;
|
|
#ifdef DUMPLOG
|
|
if (sysopt.dumplogfile)
|
|
free((genericptr_t)sysopt.dumplogfile), sysopt.dumplogfile=(char *)0;
|
|
#endif
|
|
if (sysopt.genericusers)
|
|
free((genericptr_t) sysopt.genericusers),
|
|
sysopt.genericusers = (char *) 0;
|
|
#ifdef PANICTRACE
|
|
if (sysopt.gdbpath)
|
|
free((genericptr_t) sysopt.gdbpath), sysopt.gdbpath = (char *) 0;
|
|
if (sysopt.greppath)
|
|
free((genericptr_t) sysopt.greppath), sysopt.greppath = (char *) 0;
|
|
#endif
|
|
/* this one's last because it might be used in panic feedback, although
|
|
none of the preceding ones are likely to trigger a controlled panic */
|
|
if (sysopt.fmtd_wizard_list)
|
|
free((genericptr_t) sysopt.fmtd_wizard_list),
|
|
sysopt.fmtd_wizard_list = (char *) 0;
|
|
return;
|
|
}
|
|
|
|
extern const struct attack c_sa_yes[NATTK];
|
|
extern const struct attack c_sa_no[NATTK];
|
|
|
|
void
|
|
sysopt_seduce_set(val)
|
|
int val;
|
|
{
|
|
#if 0
|
|
/*
|
|
* Attack substitution is now done on the fly in getmattk(mhitu.c).
|
|
*/
|
|
struct attack *setval = val ? c_sa_yes : c_sa_no;
|
|
int x;
|
|
|
|
for (x = 0; x < NATTK; x++) {
|
|
mons[PM_INCUBUS].mattk[x] = setval[x];
|
|
mons[PM_SUCCUBUS].mattk[x] = setval[x];
|
|
}
|
|
#else
|
|
nhUse(val);
|
|
#endif /*0*/
|
|
return;
|
|
}
|
|
|
|
/*sys.c*/
|