Commit Graph

220 Commits

Author SHA1 Message Date
nhmall
0eb7f109e0 follow-up, program_state 2024-07-13 16:31:35 -04:00
nhmall
6c0ae092c6 distinguish global variables that get written to savefile
The g? structs had a mix of variables that were written to
the savefile, and those that were not.

For better clarity and to distinguish those that end up in
the savefile, relocate some g? variables that get written
directly to the savefile into different structs.

This updates EDITLEVEL, although technically it probably
didn't need to, since savefile contents are not changing.

Details:

    gb.bases            -> svb.bases
    gb.bbubbles         -> svb.bbubbles
    gb.branches         -> svb.branches
    gc.context          -> svc.context
    gd.disco            -> svd.disco
    gd.dndest           -> svd.dndest
    gd.doors            -> svd.doors
    gd.doors_alloc      -> svd.doors_alloc
    gd.dungeon_topology -> svd.dungeon_topology
    gd.dungeons         -> svd.dungeons
    ge.exclusion_zones  -> sve.exclusion_zones
    gh.hackpid          -> svh.hackpid
    gi.inv_pos          -> svi.inv_pos
    gk.killer           -> svk.killer
    gl.lastseentyp      -> svl.lastseentyp
    gl.level            -> svl.level
    gl.level_info       -> svl.level_info
    gm.mapseenchn       -> svm.mapseenchn
    gm.moves            -> svm.moves
    gm.mvitals          -> svm.mvitals
    gn.n_dgns           -> svn.n_dgns
    gn.n_regions        -> svn.n_regions
    gn.nroom            -> svn.nroom
    go.oracle_cnt       -> svo.oracle_cnt
    gp.pl_character     -> svp.pl_character
    gp.pl_fruit         -> svp.pl_fruit
    gp.plname           -> svp.plname
    gp.program_state    -> svp.program_state
    gq.quest_status     -> svq.quest_status
    gr.rooms            -> svr.rooms
    gs.sp_levchn        -> svs.sp_levchn
    gs.spl_book         -> svs.spl_book
    gt.timer_id         -> svt.timer_id
    gt.tune             -> svt.tune
    gu.updest           -> svu.updest
    gx.xmax             -> svx.xmax
    gx.xmin             -> svx.xmin
    gy.ymax             -> svy.ymax
    gy.ymin             -> svy.ymin

Related note:
There are some pointer variables that are heads of chains that were not
moved from 'g?' to 'sv?', because they are not actually written to the
savefile directly, but the objects/monst/trap/lightsource/timer in the
chains they point to are. That can be changed, if desired.
Examples: gi.invent, gm.migrating_objs, gb.billobjs, gm.migrating_mons,
          gf.ftrap, gl.light_base, gt.timer_base
2024-07-13 14:57:50 -04:00
RainRat
7656804ae9 fix typos 2024-04-10 00:46:21 -07:00
nhmall
ba00dc9066 sever extracolors from utf8map and ENHANCED_SYMBOLS
move the custom color data into its own field in the glyphmap
and disassociate it from the unicode/utf8 stuff.

move the glyphcache stuff during options processing and parsing
into new file glyphs.c and out of utf8map.c, and make it
general, and not part of ENHANCED_SYMBOLS.

Do the groundwork for allowing glyph color customizations to
work when any symset is loaded and not restrict it only to
the enhanced1 H_UTF8 symsets.

The customizations in effect are still affiliated with a particular
symset.

Also closes #1224, but the PR itself references a data structure
made obsolete by this commit. The curses comment from the PR was
added into the code.

The PR also made several suggestions, but only the first
one has been included in this commit (and no longer based on
the handler), that being:
"allow defining colors if other symbol handling modes are used
(possibly limited to the standard 16 colors)."

FredrIQ also wrote the following suggestions in PR#1224:

Something I was also contemplating, unrelated to implementation of this
support in curses, would be the ability for the following:

allow defining colors if other symbol handling modes are used (possibly limited to the standard 16 colors)
allow defining attributes (for example: glyph:G_pet_female_kitten:U+0066/red/underline)
allow specifying glyphs as wildcards for defining global color/attribute changes

Something I also want to see are keywords for "don't change the current defined data". If this
were to be added, you could for example do this:
OPTIONS=glyph:G_*_fox:U+0064/blue
OPTIONS=glyph:G_statue_*:basechar/gray/underline
for "make all foxes use a blue color, make all statues gray with underline" without needing
to specify the relevant character for every statue. This ("basechar", "basefg", etc)
should perhaps also be added for MENUCOLORS and statushilites, so that you can, for
example, underline all items being worn without needing to specify a bunch of
near-duplicate rules for combining BUC colors + underline worn items
as per #1064
2024-03-23 15:36:22 -04:00
nhmall
8f4137f9fc The Lua download site won't accept http: anymore 2024-03-08 12:30:59 -05:00
nhmall
cfc3a7f2b6 set of Makefiles.vms for GNU make 4.1 on VMS based on Unix Makefiles
A test build log follows

$ make
pipe set default [.src] && mcr NHMAL4$DKA100:[DEVEL.HELPERS]make.exe;1 LUA_VERSION=5.4.6 nethack \
        && set def [-]
make[1]: Entering directory 'DKA100:[DEVEL.NetHack370.src]'
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]hacklib.c /OBJECT=hacklib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)    /obj=[-.util]panic.obj [-.util]panic.c
if f$search("hacklib.olb").eqs."" then -
library/create hacklib.olb/object
library/insert/replace hacklib.olb hacklib.obj,[-.util]panic.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lapi.c /OBJECT=lapi.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lauxlib.c /OBJECT=lauxlib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lbaselib.c /OBJECT=lbaselib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lcode.c /OBJECT=lcode.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lcorolib.c /OBJECT=lcorolib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lctype.c /OBJECT=lctype.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]ldblib.c /OBJECT=ldblib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]ldebug.c /OBJECT=ldebug.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]ldo.c /OBJECT=ldo.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]ldump.c /OBJECT=ldump.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lfunc.c /OBJECT=lfunc.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lgc.c /OBJECT=lgc.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]linit.c /OBJECT=linit.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]liolib.c /OBJECT=liolib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]llex.c /OBJECT=llex.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lmathlib.c /OBJECT=lmathlib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lmem.c /OBJECT=lmem.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]loadlib.c /OBJECT=loadlib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lobject.c /OBJECT=lobject.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lopcodes.c /OBJECT=lopcodes.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]loslib.c /OBJECT=loslib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lparser.c /OBJECT=lparser.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lstate.c /OBJECT=lstate.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lstring.c /OBJECT=lstring.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lstrlib.c /OBJECT=lstrlib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]ltable.c /OBJECT=ltable.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]ltablib.c /OBJECT=ltablib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]ltm.c /OBJECT=ltm.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lundump.c /OBJECT=lundump.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lutf8lib.c /OBJECT=lutf8lib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lvm.c /OBJECT=lvm.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /define=(LUA_USE_C89) [-.lib.lua.lua546.src]lzio.c /OBJECT=lzio.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  luaplaceholder.
c /OBJECT=luaplaceholder.obj
if f$search("[-.lib.lua]lua546.olb").eqs."" then library/create/obj [-.lib.lua]l
ua546.olb
library/insert/replace [-.lib.lua]lua546.olb lapi.obj, lauxlib.obj, lbaselib.obj
, lcode.obj, lcorolib.obj, lctype.obj, ldblib.obj, ldebug.obj, ldo.obj, ldump.ob
j, lfunc.obj, lgc.obj, linit.obj, liolib.obj, llex.obj, lmathlib.obj, lmem.obj,
loadlib.obj, lobject.obj, lopcodes.obj, loslib.obj, lparser.obj, lstate.obj, lst
ring.obj, lstrlib.obj, ltable.obj, ltablib.obj, ltm.obj, lundump.obj, lutf8lib.o
bj, lvm.obj, lzio.obj, luaplaceholder.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.sys.vms]vmsmain.c /OBJECT=vmsmain.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]allmain.c /OBJECT=allmain.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]alloc.c/OBJECT=alloc.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]apply.c/OBJECT=apply.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]artifact.c /OBJECT=artifact.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]attrib.c /OBJECT=attrib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]ball.c /OBJECT=ball.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]bones.c/OBJECT=bones.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]botl.c /OBJECT=botl.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]calendar.c /OBJECT=calendar.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]cmd.c /OBJECT=cmd.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]coloratt.c /OBJECT=coloratt.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]dbridge.c /OBJECT=dbridge.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]decl.c /OBJECT=decl.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]detect.c /OBJECT=detect.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]dig.c /OBJECT=dig.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]display.c /OBJECT=display.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]dlb.c /OBJECT=dlb.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]do.c /OBJECT=do.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]do_name.c /OBJECT=do_name.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]do_wear.c /OBJECT=do_wear.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]dog.c /OBJECT=dog.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]dogmove.c /OBJECT=dogmove.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]dokick.c /OBJECT=dokick.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]dothrow.c /OBJECT=dothrow.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]drawing.c /OBJECT=drawing.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]dungeon.c /OBJECT=dungeon.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]eat.c /OBJECT=eat.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]end.c /OBJECT=end.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]engrave.c /OBJECT=engrave.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]exper.c/OBJECT=exper.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]explode.c /OBJECT=explode.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]extralev.c /OBJECT=extralev.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]files.c/OBJECT=files.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]fountain.c /OBJECT=fountain.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]getpos.c /OBJECT=getpos.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]hack.c /OBJECT=hack.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]insight.c /OBJECT=insight.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]invent.c /OBJECT=invent.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]isaac64.c /OBJECT=isaac64.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]light.c/OBJECT=light.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]lock.c /OBJECT=lock.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mail.c /OBJECT=mail.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]makemon.c /OBJECT=makemon.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mcastu.c /OBJECT=mcastu.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mdlib.c /OBJECT=mdlib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mhitm.c /OBJECT=mhitm.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mhitu.c /OBJECT=mhitu.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]minion.c /OBJECT=minion.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mklev.c /OBJECT=mklev.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mkmap.c /OBJECT=mkmap.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mkmaze.c /OBJECT=mkmaze.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mkobj.c /OBJECT=mkobj.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mkroom.c /OBJECT=mkroom.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mon.c /OBJECT=mon.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mondata.c /OBJECT=mondata.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]monmove.c /OBJECT=monmove.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]monst.c /OBJECT=monst.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mplayer.c /OBJECT=mplayer.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]mthrowu.c /OBJECT=mthrowu.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]muse.c /OBJECT=muse.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]music.c /OBJECT=music.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]nhlua.c /OBJECT=nhlua.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]nhlsel.c /OBJECT=nhlsel.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]nhlobj.c /OBJECT=nhlobj.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]objnam.c /OBJECT=objnam.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]o_init.c /OBJECT=o_init.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]objects.c /OBJECT=objects.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]options.c /OBJECT=options.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]pager.c /OBJECT=pager.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]pickup.c /OBJECT=pickup.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]pline.c /OBJECT=pline.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]polyself.c /OBJECT=polyself.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]potion.c /OBJECT=potion.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]pray.c /OBJECT=pray.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]priest.c /OBJECT=priest.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]quest.c /OBJECT=quest.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]questpgr.c /OBJECT=questpgr.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]read.c /OBJECT=read.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]rect.c /OBJECT=rect.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]region.c /OBJECT=region.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]report.c /OBJECT=report.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]restore.c /OBJECT=restore.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]rip.c /OBJECT=rip.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]rnd.c /OBJECT=rnd.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]role.c /OBJECT=role.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]rumors.c /OBJECT=rumors.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]save.c /OBJECT=save.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]selvar.c /OBJECT=selvar.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]sfstruct.c /OBJECT=sfstruct.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]shk.c /OBJECT=shk.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]shknam.c /OBJECT=shknam.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]sit.c /OBJECT=sit.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]sounds.c /OBJECT=sounds.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]sp_lev.c /OBJECT=sp_lev.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]spell.c /OBJECT=spell.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]stairs.c /OBJECT=stairs.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]steal.c /OBJECT=steal.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]steed.c /OBJECT=steed.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]strutil.c /OBJECT=strutil.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]symbols.c /OBJECT=symbols.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]sys.c /OBJECT=sys.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]teleport.c /OBJECT=teleport.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]timeout.c /OBJECT=timeout.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]topten.c /OBJECT=topten.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]track.c /OBJECT=track.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]trap.c /OBJECT=trap.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]u_init.c /OBJECT=u_init.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]utf8map.c /OBJECT=utf8map.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]uhitm.c/OBJECT=uhitm.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]vault.c/OBJECT=vault.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]version.c /OBJECT=version.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]vision.c /OBJECT=vision.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]weapon.c /OBJECT=weapon.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]were.c /OBJECT=were.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]wield.c /OBJECT=wield.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]windows.c /OBJECT=windows.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]wizard.c /OBJECT=wizard.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]wizcmds.c /OBJECT=wizcmds.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]worm.c /OBJECT=worm.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]worn.c /OBJECT=worn.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]write.c/OBJECT=write.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]zap.c /OBJECT=zap.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.sys.vms]vmsfiles.c /OBJECT=vmsfiles.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.sys.vms]vmsmail.c /OBJECT=vmsmail.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.sys.vms]vmsmisc.c /OBJECT=vmsmisc.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.sys.vms]vmstty.c /OBJECT=vmstty.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.sys.vms]vmsunix.c /OBJECT=vmsunix.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /OBJECT=getline.obj [-.win.tty]getline.c
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /OBJECT=termcap.obj [-.win.tty]termcap.c
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /OBJECT=topl.obj [-.win.tty]topl.c
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  /OBJECT=wintty.obj [-.win.tty]wintty.c
cxx /INCLUDE_DIR=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS) /OBJECT=cppregex.obj [-.sys.share]cppregex.cpp
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)  [-.src]tclib.c /OBJECT=tclib.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)    \
        /OBJECT=date.obj [-.src]date.c
Linking nethack.
link  vmsmain.obj, \
        allmain.obj, alloc.obj, apply.obj, artifact.obj, attrib.obj, ball.obj, b
ones.obj, botl.obj, calendar.obj, cmd.obj, coloratt.obj, dbridge.obj, decl.obj,
detect.obj, dig.obj, display.obj, dlb.obj, do.obj, do_name.obj, do_wear.obj, dog
.obj, dogmove.obj, dokick.obj, dothrow.obj, drawing.obj, dungeon.obj, eat.obj, e
nd.obj, engrave.obj, exper.obj, explode.obj, extralev.obj, files.obj, fountain.o
bj, getpos.obj, hack.obj, hacklib.obj, insight.obj, invent.obj, isaac64.obj, lig
ht.obj, lock.obj, mail.obj, makemon.obj, mcastu.obj, mdlib.obj, mhitm.obj, mhitu
.obj, minion.obj, mklev.obj, mkmap.obj, mkmaze.obj, mkobj.obj, mkroom.obj, mon.o
bj, mondata.obj, monmove.obj, monst.obj, mplayer.obj, mthrowu.obj, muse.obj, mus
ic.obj, nhlua.obj, nhlsel.obj, nhlobj.obj, objnam.obj, o_init.obj, objects.obj,
options.obj, pager.obj, pickup.obj, pline.obj, polyself.obj, potion.obj, pray.ob
j, priest.obj, quest.obj, questpgr.obj, read.obj, rect.obj, region.obj, report.o
bj, restore.obj, rip.obj, rnd.obj, role.obj, rumors.obj, save.obj, selvar.obj, s
fstruct.obj, shk.obj, shknam.obj, sit.obj, sounds.obj, sp_lev.obj, spell.obj, st
airs.obj, steal.obj, steed.obj, strutil.obj, symbols.obj, sys.obj, teleport.obj,
 timeout.obj, topten.obj, track.obj, trap.obj, u_init.obj, utf8map.obj, uhitm.ob
j, vault.obj, version.obj, vision.obj, weapon.obj, were.obj, wield.obj, windows.
obj, wizard.obj, wizcmds.obj, worm.obj, worn.obj, write.obj, zap.obj, vmsfiles.o
bj, vmsmail.obj, vmsmisc.obj, vmstty.obj, vmsunix.obj, getline.obj, termcap.obj,
 topl.obj, wintty.obj, cppregex.obj, tclib.obj, date.obj \
         /EXECUTABLE=nethack.exe\
         +[-.lib.lua]lua546.olb/library
nethack is up to date.
make[1]: Leaving directory 'DKA100:[DEVEL.NetHack370.src]'
pipe set def [.util] && mcr NHMAL4$DKA100:[DEVEL.HELPERS]make.exe;1 recover && s
et def [-]
make[1]: Entering directory 'DKA100:[DEVEL.NetHack370.util]'
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)    recover.c /OB
J=recover.obj
link  /EXE=recover.exe recover.obj
make[1]: Leaving directory 'DKA100:[DEVEL.NetHack370.util]'
pipe set def [.doc] && mcr NHMAL4$DKA100:[DEVEL.HELPERS]make.exe;1 Guidebook &&
set def [-]
make[1]: Entering directory 'DKA100:[DEVEL.NetHack370.doc]'
pipe set def [-.util] &&  make makedefs && set def [-.doc]
make[2]: Entering directory 'DKA100:[DEVEL.NetHack370.util]'
LIBRARY/CREATE hacklib.olb/object
LIBRARY/INSERT hacklib.olb [-.src]hacklib.obj,[-.util]panic.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)   makedefs.c /OB
J=makedefs.obj
CC /INCLUDE=([-.include],[-.lib.lua.lua546.src]) /NAMES=(AS_IS)    /obj=placehol
der.obj placeholder.c
link  /EXE=makedefs.exe \
        []makedefs.obj, [-.src]monst.obj, [-.src]objects.obj, [-.src]date.obj, [
-.src]alloc.obj, []panic.obj, placeholder.obj, \
        hacklib.olb/lib
make[2]: Leaving directory 'DKA100:[DEVEL.NetHack370.util]'
disabled Guidebook on vms
                         make[1]: Leaving directory 'DKA100:[DEVEL.NetHack370.do
c]'
pipe set def [.dat] && mcr NHMAL4$DKA100:[DEVEL.HELPERS]make.exe;1 bogusmon  &&
set def [-]
make[1]: Entering directory 'DKA100:[DEVEL.NetHack370.dat]'
mcr [-.util]makedefs.exe -s
about to Sprintf epitaph sizeof filename 600.filename = "../dat/epitaph.txt".RDT
MODE = "r".just did Sprintf filename="../dat/epitaph".about to Sprintf engrave s
izeof filename 600.filename = "../dat/engrave.txt".RDTMODE = "r".just did Sprint
f filename="../dat/engrave".about to Sprintf bogusmon sizeof filename 600.filena
me = "../dat/bogusmon.txt".RDTMODE = "r".just did Sprintf filename="../dat/bogus
mon".
     make[1]: Leaving directory 'DKA100:[DEVEL.NetHack370.dat]'
pipe set def [.dat] && mcr NHMAL4$DKA100:[DEVEL.HELPERS]make.exe;1 data && set d
ef [-]
make[1]: Entering directory 'DKA100:[DEVEL.NetHack370.dat]'
mcr [-.util]makedefs.exe -d
make[1]: Leaving directory 'DKA100:[DEVEL.NetHack370.dat]'
pipe set def [.dat] && mcr NHMAL4$DKA100:[DEVEL.HELPERS]make.exe;1 engrave && se
t def [-]
make[1]: Entering directory 'DKA100:[DEVEL.NetHack370.dat]'
make[1]: 'engrave' is up to date.
make[1]: Leaving directory 'DKA100:[DEVEL.NetHack370.dat]'
pipe set def [.dat] && mcr NHMAL4$DKA100:[DEVEL.HELPERS]make.exe;1 epitaph && se
t def [-]
make[1]: Entering directory 'DKA100:[DEVEL.NetHack370.dat]'
make[1]: 'epitaph' is up to date.
make[1]: Leaving directory 'DKA100:[DEVEL.NetHack370.dat]'
pipe set def [.dat] && mcr NHMAL4$DKA100:[DEVEL.HELPERS]make.exe;1 oracles && se
t def [-]
make[1]: Entering directory 'DKA100:[DEVEL.NetHack370.dat]'
mcr [-.util]makedefs.exe -h
make[1]: Leaving directory 'DKA100:[DEVEL.NetHack370.dat]'
pipe set def [.dat] && mcr NHMAL4$DKA100:[DEVEL.HELPERS]make.exe;1 options && se
t def [-]
make[1]: Entering directory 'DKA100:[DEVEL.NetHack370.dat]'
mcr [-.util]makedefs.exe -v
make[1]: Leaving directory 'DKA100:[DEVEL.NetHack370.dat]'
pipe set def [.dat] && mcr NHMAL4$DKA100:[DEVEL.HELPERS]make.exe;1 rumors && set
 def [-]
make[1]: Entering directory 'DKA100:[DEVEL.NetHack370.dat]'
mcr [-.util]makedefs.exe -r
make[1]: Leaving directory 'DKA100:[DEVEL.NetHack370.dat]'
pipe set def [.dat] && mcr NHMAL4$DKA100:[DEVEL.HELPERS]make.exe;1 spec_levs &&
set def [-]
make[1]: Entering directory 'DKA100:[DEVEL.NetHack370.dat]'
make[1]: 'spec_levs' is up to date.
make[1]: Leaving directory 'DKA100:[DEVEL.NetHack370.dat]'
pipe set def [.dat] && mcr NHMAL4$DKA100:[DEVEL.HELPERS]make.exe;1 quest_levs &&
 set def [-]
make[1]: Entering directory 'DKA100:[DEVEL.NetHack370.dat]'
make[1]: 'quest_levs' is up to date.
make[1]: Leaving directory 'DKA100:[DEVEL.NetHack370.dat]'
echo disabled check-dlb
disabled check-dlb
                  pipe true
Done.
2024-03-08 12:15:53 -05:00
nhmall
50811037f3 split some code into separate files
new .h files: hacklib.h selvar.h stairs.h

new .c files: calendar.c, getpos.c, report.c, selvar.c, stairs.c,
              strutil.c, wizcmds.c

cleanup of hacklib.c and mdlib.c

hacklib contains functions that do not have to link with the core

relocate wiz commands from cmd.c to wizcmds.c

relocate CRASHREPORT stuff to report.c

relocate getpos stuff from do_name.c to getpos.c

remove temporary struct definition from extern.h

cross-compile PRE-section split into cross-pre1.370 and cross-pre2.370

Windows sys/windows/Makefile.nmake and sys/windows/Makefile.mingw32 and
visual studio project file updates

Unix sys/unix/Makefile.src, sys/unix/Makefile.utl

populate selvar.c and selvar.h

build on MS-DOS (not cross-compile) Makefile updates
for sys/msdos/Makefile.GCC (untested)

vms updates for above (untested)
2024-03-07 11:01:04 -05:00
RainRat
a3658f85ac fix typos 2024-02-28 20:15:56 -08:00
nhmall
688ac6ffbe remove register from variable declarations 2024-02-19 16:30:07 -05:00
nhkeni
c7ab9a0565 Some lua catchup and cleanup
- add nhl_pcall_handle() to wrap all nhl_pcall calls that didn't check
  return value and either panic() or impossible()
- add --loglua (unix only) to dump Lua memory and steps info to livelog
- remove old logging
- set memory and step limits on all Lua VMs
2024-01-04 10:37:38 -05:00
nhmall
04082a2033 Remove TEXTCOLOR build option 2023-11-22 16:01:58 -05:00
Michael Meyer
85b727c92c Apply sysconf EXPLORERS restriction on startup
The sysconf EXPLORERS list restricting access to explore mode was being
evaluated and used when a player used the #exploremode command in-game,
or when specifying -X or OPTIONS=playmode:explore on the command line
when resuming a normal game, but not when starting an entirely new game.
When SYSCF is avilable, check for authorization early, similar to debug
mode authorization, to restrict access to explore mode to EXPLORERS
under (hopefully) all circumstances.
2023-11-07 15:38:08 -08:00
PatR
284452796c redo tty resizing
Rest of 'not PR #1102'.  Resizing the terminal while getpos was in
operation recalculated the map from scratch instead of redrawing what
the core considers to already be shown.  And it was always operating
while an asynchronous signal was excuting which could potentially
clobber whatever was running at the time the signal arrived.

This uses same redrawing as the prior '^R during getpos()' fix.  It
also only performs the resize while tty_nhgetch() is waiting for
input.  If that is the situation at the time that the signal arrives
then it will resize immediately (while in the asynchronous signal
handler); if not, it will set a flag and tty_nhgetch() will do the
resize the next time it gets called.

This builds with TTY_PERM_INVENT enabled and doesn't seem to be any
worse than before, but there are bugs with that.  The only way I could
get perminv to appear was to save and restore, then perm_invent was
honored for both RC file and mO command.  And once I managed to get it
to display, moving an item from a lower case slot to slot 'A', made
that item vanish; nothing appeared in the invent's right hand panel.

Both of those misbehaviors already happen prior to this commit.  I
also saw an abort+panictrace if I resized while at the "Dump core?"
prompt when running the pre-commit code and didn't see that with the
post-commit code (although the prompt wasn't shown so I couldn't tell
that it was waiting for an answer).  The abort probably sounds scarier
than it warrants; I suspect that the pre-commit code just treated the
resize as answering 'y' for some reason, possibly a stale value in the
variable it uses.
2023-10-12 18:45:14 -07:00
nhmall
14faa682c4 improve selectsave handling for Windows
If there were outdated savefiles encountered during
startup, each individual one was getting a wait_synch
that required a <return> even though a message window
wasn't being used at that point.

Allow suppression of the individual per-file wait_synch()
calls on Windows, so that a single one can be done once
the selectsave processing is overwith.

This was a little messy because an indicator had to flow
down through validate(), uptodate(), etc.

There shouldn't be any change in how things behave on
any non-Windows platforms.
2023-09-22 15:14:53 -04:00
nhkeni
8c095b009a Add CRASHREPORT, show contact form on panic/impossible
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).
2023-09-06 12:27:13 -04:00
nhmall
be1be16458 outdated file 2023-07-03 11:51:06 -04:00
nhmall
47fc27d188 update for vmsbuild.com 2023-06-23 16:37:59 -04:00
nhmall
0616a83ef8 updated build command file 2023-06-23 13:25:09 -04:00
PatR
16d0a9e4ef vms_basename fix
vms_basename() was recently changed to take a second argument to
control whether to include the suffix portion of the name but an
existing call to set up 'hname' still had only one.

More than just adding the extra argument was needed.  It returns
a static buffer so if it got called for DEBUGFILES, 'hname' would
have been clobbered.
2023-06-22 15:59:56 -07:00
PatR
643b78bc40 vms_basename fix
vms_basename() was recently changed to take a second argument to
control whether to include the suffix portion of the name (used for
DEBUGFILES) but an existing call still had only one.
2023-06-22 15:30:27 -07:00
PatR
ecd3593163 github pull request #1030 - VDECL
The pull request from argrath would have moved the definition of
VDECL from tradstdc.h to vmsconf.h because some out of date references
to it in sys/vms/*.c were the only place it still appeared to be used.
Instead of applying that, remove those old references.

NetHack 3.7.x requires C99 so just remove VDECL since it was present
in order to support pre-ANSI compilers.  (There is at least one
comment that still mentions it though.)

This also gets rid of another chunk of tradstdc.h that was allowing
either pre-ANSI or nearly-ANSI compilers to deal with nethack's old
code.  I left the USE_STDARG/USE_VARARGS/USE_OLDARGS stuff in place
even though anything supporting C99 shouldn't need that.  Some or
all of the [UN]WIDENED_PROTOTYPES stuff is still there too.

Closes #1030
2023-05-31 01:34:11 -07:00
PatR
cf8a49cae6 use to "feature" in DEBUGFILES
The code to lookup a value in DEBUGFILES usually operates on a file
name, but there are few non-file uses.  The latter wouldn't work on
VMS because of the way it was manipulating the name:  first stripping
away path, suffix, and version, then adding hardcoded ".c" suffix on.

I thought we already had a routine to get the base part of a name
from a full path, but if so, I haven't been able to find it.  This
adds new nh_basename() to do that, with the option of either keeping
or discarding the suffix or type portion.

The VMS usage that prompted this hasn't actually been tested.
2023-05-25 15:35:49 -07:00
nhmall
2876b6e8fd vmsbuild.com update 2023-05-24 19:46:33 -04:00
nhmall
65a0ff2d9a update OpenVMS com files (VSI C, NetHack-3.7) 2023-05-23 17:50:24 -04:00
nhmall
4761bf190e OpenVMS update follow-up 2023-05-22 20:50:35 -04:00
nhmall
68b8e84aa3 changes to build with VSI C compiler
The changes from past OpenVMS compilers are #ifdef'd VMS9
2023-05-22 14:43:10 -04:00
nhmall
75e8e06dee commit 02a48aa8 split of g fixup 2023-05-17 21:17:35 -04:00
nhmall
ec9d3cb88e keep external identifiers under 31 characters length 2023-05-13 13:49:57 -04:00
PatR
65debc1adb incorporate 3.6.7+ build fix for VMS
Make sure CLR_MAX is defined when winprocs.h uses it.
sys/vms/vmsmail.c uses wintypes.h and winprocs.h without hack.h;
a change in 3.6.3 broke that but wasn't noticed until now.

I haven't added a fixes entry since we don't know whether 3.7.x
will eventually be buildable on VMS.
2023-05-10 12:47:42 -07:00
Pasi Kallinen
fc7a32b86e Tutorial level
Add a tutorial level to teach commands to new players.
Very much a WIP.

Breaks save and bones compat.
2023-03-01 14:00:29 +02:00
PatR
998b5af644 non-Unix sysconf updates
For non-Unix systems, disable the "description of NetHack's command
line" entry in the help command's menu.
2023-02-21 11:15:08 -08:00
Pasi Kallinen
777f53c212 Add hellfill.lua to VMS install 2023-01-27 19:48:13 +02:00
nhmall
446044e1d5 1st of a few sequencing changes
rename display_gamewindows() to init_sound_and_display_gamewindows()
(I know that's getting pretty long-named).

move activate_chosen_soundlib() into init_sound_and_display_gamewindows()
from moveloop_preamble().

Also included was a missing break in a switch related to sounds.
2023-01-26 17:15:59 -05:00
nhmall
ba5356603a yn()
A number of C compiler suites have a math.h library that includes a yn()
function name that conflicts with NetHack's yn() macro:
"The y0(), y1(), and yn() functions are Bessel functions of the second kind,
for orders 0, 1, and n, respectively. The argument x must be positive. The
argument n should be greater than or equal to zero. If n is less than zero,
there will be a negative exponent in the result."

At one point, isaac64.h included math.h, although that has since been removed.

Some libraries used in NetHack (Qt for one) do include math.h and that required
build work-arounds to avoid the conflict.

Rename the NetHack macro from yn() to y_n() and avoid the math.h conflict
altogether, eliminating the need for that particular work-around.
2023-01-12 16:04:40 -05:00
Pasi Kallinen
030fc0036a Remove NO_VSNPRINTF
Affects only ancient VMS where vsnprintf wasn't available.
2023-01-06 15:53:06 +02:00
nhmall
02a48aa8cf split g into multiple structures
The consolidation of global variables from scattered source
files into decl.c and declared in decl.h was begun in 3.7.0.
Their placement in common files was done for centralized
initialization and potential re-initialization during a
"play again" scenario.

It wasn't really necessary for all of them to be housed in a
single huge structure to meet the "play again" requirement,
and the single huge structure has been a little unwieldy when
it comes to maintenance.

Following this commit, instead of one single extremely large structure
named 'g' to house all of the relocated global variables, they
are distributed into several ga through gz.

To make things easy for the developer, each variable is placed
into the struct corresponding to the starting letter of the variable.
That way, no lookup is required in order to know which struct houses
a particular variable, it is a simple match to the starting letter
for all the centralized global variables.

A global variable named 'amulets', would be found in ga.
    ga.amulets
     ^ ^
A global varable named 'move', would be found in gm.
    gm.moves
     ^ ^
A global variable named 'val_for_n_or_more' would be found in gv.
    gv.val_for_n_or_more
     ^ ^
A global variable named 'youmonst' would be found in gy.
    gy.youmonst
     ^ ^
2022-11-29 21:53:21 -05:00
nhmall
4b04b1e6ac expand support for noreturn declarations
Although gcc specifies support for declaring a function as
noreturn after the function name and parameters, other compilers
do so via an attribute at the start of the declaration. Add some
macro support for the attribute-at-the-beginning method:
  o MS Visual Studio compiler
  o Upcoming C23 standard (untested at this point)
2022-11-24 00:51:42 -05:00
nhmall
99a93fe50b some C99 changes
Instead of using index() macro defined to strchr, use C99 strchr.
Instead of using rindex() macro defined to strrchr, use C99 strrchr.

If you want to try building on a platform that doesn't offer those
two functions, these are available:
    define NOT_C99       /* to make some non-C99 code available */
    define NEED_INDEX    /* to define a macro for index()  */
    define NEED_RINDX    /* to define a macro for rindex() */
2022-10-29 10:54:25 -04:00
nhmall
88f6df2d8b some tabs to spaces
cd src
    grep -P -n '\t' *.c | grep -v "1:"
    cd ../include
    grep -P -n '\t' *.h | grep -v "1:"
    cd ..

side note: win/Qt/*.cpp are full of tabs
2022-10-26 14:21:23 -04:00
nhmall
8df41a6ba2 Revert "NEED_VARARGS followup"
This reverts commit 4d34e153e0.
2022-09-17 15:57:52 -04:00
nhmall
4d34e153e0 NEED_VARARGS followup 2022-09-17 14:22:20 -04:00
nhmall
cb0c21e91d ENHANCED_SYMBOLS
A new feature, enabled by default to maximize testing, but one which can
be disabled by commenting it out in config.h

With this, some additional information is added to the glyphmap entries
in a new optional substructure called u with these fields:
    ucolor          RGB color for use with truecolor terminals/platforms.
                    A ucolor value of zero means "not set." The actual
                    rgb value of 0 has the 0x1000000 bit set.
    u256coloridx    256 color index value for use with 256 color
                    terminals, the closest color match to ucolor.
    utf8str         Custom representation via utf-8 string (can be null).

There is a new symset included in the symbols file, called enhanced1.

Some initial code has been added to parse individual
OPTIONS=glyph:glyphid/R-G-B entries in the config file.

The glyphid can, in theory, either be an individual glyph (G_* glyphid)
for a single glyph, or it can be an existing symbol S_ value
(monster, object, or cmap symbol) to store the custom representation for
all the glyphs that match that symbol.

Examples:
   OPTIONS=glyph:G_fountain/U+03A8/0-150-255

(Your platform/terminal font needs to be able to include/display the
character, of course.)

The NetHack core code does parsing and storing the customized
entries, and adding them to the glyphmap data structure.

Any window port can utilize the additional information in the glyphinfo
that is passed to them, once code is added to do so.

Also, consolidate some symbol-related code into symbols.c, and remove it from
files.c and options.c
2022-05-07 10:25:13 -04:00
nhmall
c2cb89cae9 vms bits to c99 2022-02-07 15:15:14 -05:00
nhmall
9bb96322a8 compile NetHack-3.7 without makedefs-generated .h files
This evolves and hopefully eases the game-build requirements by
removing game-compile dependencies on any header files generated
by the makedefs utility, including:

date.h dependency and its inclusion is removed and comparable functionality
is produced at runtime via new file src/date.c.

pm.h dependency and its inclusion is removed and comparable functionality is
produced by moving the monster definitions from monst.c into new header
file called monsters.h and altering them slightly. The former pm.h header
file #define PM_ values are now replaced with appropriate emitted enum
entries during the compiler preprocessing.

onames.h dependency and	its inclusion is removed and comparable functionality
is produced by moving the object definitions from objects.c into new header
file called objects.h and altering them slightly. The former onames.h header
file #define values are now replaced with appropriate emitted enum entries
during the compiler preprocessing.

artilist.h has been slightly altered, and the former onames.h artifact-related
header file #define ART_ values are now replaced with appropriate emitted enum
entries during the compiler preprocessing.

makedefs can still produce date.h (makedefs -v), pm.h (makedefs -p), and
onames.h (makedefs -o) for reference purposes. They won't be used during
the compiler.

The other uses for makedefs remain. They are used to prepare external
file content that the game utilizes, not prerequisite code for the
compile:
    makedefs -d    (database)
    makedefs -r    (rumors)
    makedefs -h    (oracles)
    makedefs -s    (epitaphs, engravings, bogusmons)

date.c

Pull the code for date/time stamping from mdlib.c into date.c.
Set date.o to be dependent on source files, header files, and .o files
so that date.o is rebuilt from date.c when any of those changes, thus
ensuring an accurate date/time stamp. It also includes git sha
functionality formerly done by makedefs writing #define directives
into include/date.h. For unix it passes the git info on
the compile line for date.c (via sys/unix/hints/linux.2020, macOS.2020)

nethack --dumpenums (optional, but on by default)

Allow developer to obtain some internal enum values from NetHack
without having to resort to an external utility such as
makedefs.

Uncomment #define NODUMPENUMS in config.h to disable this.

The updates to sys/windows/Makefile.gcc have not been tested yet.
2021-08-21 07:59:18 -04:00
nhmall
2baadd6a29 header files sym.h and defsym.h
There were multiple symbol-related lists that had to be kept
in sync in various places.

Consolidate some of that into a single new file
    defsym.h
with a set of morphing macros that can be custom-called from
the various places that use the sym info without maintaining
multiple occurrences. Most maintenance can be done there.

Rename monsym.h to sym.h since it looks after some
symbols not related to monsters now too.

The defsym.h header file is included in multiple places to
produce different code depending on its use and the controlling
macro definitions in place prior to including it.

Its purpose is to have a definitive source for
pchar, objclass and mon symbol maintenance.

The controlling macros used to morph the resulting code are
used in these places:
  - in include/sym.h for enums of some S_ symbol values
    (define PCHAR_ENUM, MONSYMS_ENUM prior to #include defsym.h)
  - in include/objclass.h for enums of some S_ symbol values
    (define OBJCLASS_ENUM prior to #include defsym.h)
  - in src/symbols.c for parsing S_ entries in config files
    (define PCHAR_PARSE, MONSYMS_PARSE, OBJCLASS_PARSE prior
    to #include defsym.h)
  - in src/drawing.c for initializing some data structures/arrays
    (define PCHAR_DRAWING, MONSYMS_DRAWING, OBJCLASS_DRAWING prior
    to #include defsym.h)
  - in win/share/tilemap.c for processing a tile file
    (define PCHAR_TILES prior to #include defsym.h).
2021-08-10 13:35:25 -04:00
nhmall
0a10bd632d change references from winnt to windows
rename sys/winnt to sys/windows
move vs (visual studio) folder out of win/win32 and into sys/windows
rename include/ntconf.h to include/windconf.h
rename winnt.c to windsys.c
place visual studio projects into individual subfolders.

This will hopefully resolve GitHub issue #484 as well.
2021-06-03 23:26:00 -04:00
nhmall
b851b28cbe FDECL and NDECL in sys/vms 2021-01-31 12:49:22 -05:00
nhmall
1d94e65e45 finish mapglyph() removal 2021-01-02 09:22:53 -05:00
PatR
99cc236d4a vis_tab removal for VMS
Get rid of vis_tab.{c,h}, also the commented out remnants of
{dgn_comp,lev_comp}.*, and put back sfstruct.* that erroneously
got removed along with some other stuff way back when.

Untested, and the lua stuff needs to be modularized.
2020-12-30 08:58:15 -08:00
nhmall
8c42d306f7 purge trampoli.h 2020-12-13 10:27:49 -05:00