When calling panic() or impossible(), create the option of opening a browser window with most of the fields already populated. Code for MacOS and linux is included; other ports are affected by argument change to early_init which are done but not tested. To enable, define CRASHREPORT in config.h and set CRASHREPORTURL in sysconf to (for the moment at least) http[s]://www.nethack.org/common/contactcr.html Adds --grep-defined option to makedefs for Makefiles. Adds "bid" (binary identifier), an MD4 of the main nethack binary. This is ONLY for helping (in the future) contact.html to set the "NetHack from" field automatically for our own binaries. This can be faked, but the user can lie so nothing lost. There's nothing magic about MD4; other ports can use anything that prodcues a long apparently random string we can match against. - new option --bidshow for us to get the MD4 of a released binary so I can add it to the website. Only available in wizard mode and not in nethack.6. - typo macos -> macosx in hints file No support for packaging builds as I'm not sure what that would look like. Adds a javascript helper for MacOS. Adds a lua helper for linux (and builds and installs nhlua).
154 lines
4.3 KiB
C
154 lines
4.3 KiB
C
/* NetHack 3.7 sys.c $NHDT-Date: 1693083254 2023/08/26 20:54:14 $ $NHDT-Branch: keni-crashweb2 $:$NHDT-Revision: 1.63 $ */
|
|
/* 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(void)
|
|
{
|
|
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;
|
|
sysopt.livelog = LL_NONE;
|
|
|
|
/* record file */
|
|
sysopt.persmax = max(PERSMAX, 1);
|
|
sysopt.entrymax = max(ENTRYMAX, 10);
|
|
sysopt.pointsmin = max(POINTSMIN, 1);
|
|
sysopt.pers_is_uid = PERS_IS_UID;
|
|
sysopt.tt_oname_maxrank = 10;
|
|
|
|
/* sanity checks */
|
|
if (sysopt.pers_is_uid != 0 && sysopt.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);
|
|
#if (NH_DEVEL_STATUS != NH_STATUS_RELEASED)
|
|
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.crashreporturl = NULL;
|
|
|
|
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);
|
|
/* default to little-endian in 3.7 */
|
|
sysopt.saveformat[0] = sysopt.bonesformat[0] = lendian;
|
|
sysopt.accessibility = 0;
|
|
#ifdef WIN32
|
|
sysopt.portable_device_paths = 0;
|
|
#endif
|
|
|
|
/* help menu */
|
|
sysopt.hideusage = 0;
|
|
|
|
return;
|
|
}
|
|
|
|
void
|
|
sysopt_release(void)
|
|
{
|
|
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;
|
|
if (sysopt.gdbpath)
|
|
free((genericptr_t) sysopt.gdbpath), sysopt.gdbpath = (char *) 0;
|
|
if (sysopt.greppath)
|
|
free((genericptr_t) sysopt.greppath), sysopt.greppath = (char *) 0;
|
|
|
|
/* 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(
|
|
#if 0
|
|
int val)
|
|
{
|
|
/*
|
|
* 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
|
|
int val UNUSED)
|
|
{
|
|
#endif
|
|
return;
|
|
}
|
|
|
|
/*sys.c*/
|