/* 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*/