Files
nethack/sys/vms/vmsbuild.com
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

476 lines
18 KiB
Plaintext
Executable File

$ ! vms/vmsbuild.com -- compile and link NetHack 3.7.* [pr]
$ version_number = "3.7.0"
$ ! $NHDT-Date: 1687541093 2023/06/23 17:24:53 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.39 $
$ ! Copyright (c) 2018 by Robert Patrick Rankin
$ ! NetHack may be freely redistributed. See license for details.
$ !
$ ! usage:
$ ! $ set default [.src] !or [-.-.src] if starting from [.sys.vms]
$ ! $ @[-.sys.vms]vmsbuild [compiler-option] [link-option] [cc-switches] -
$ ! [linker-switches] [interface]
$ ! options:
$ ! compiler-option : either "VSIC", "VAXC", "DECC",
$ ! "GNUC" or "" or "fetchlua" !default in 3.7 is VSIC
$ ! link-option : either "SHARE[able]" or "LIB[rary]" !default SHARE
$ ! cc-switches : optional qualifiers for CC (such as "/noOpt/Debug")
$ ! linker-switches : optional qualifiers for LINK (/Debug or /noTraceback)
$ ! interface : "TTY" or "CURSES" or "TTY+CURSES" or "CURSES+TTY"
$ ! notes:
$ ! If the symbol "CC" is defined, compiler-option is not used (unless it
$ ! is "LINK").
$ ! The link-option refers to VAXCRTL (C Run-Time Library) handling;
$ ! to specify it while letting compiler-option default, use "" as
$ ! the compiler-option.
$ ! To re-link without compiling, use "LINK" as special 'compiler-option';
$ ! to re-link with GNUC library, 'CC' must begin with "G" (or "g").
$ ! All options are positional; to specify a later one without an earlier
$ ! one, use "" in the earlier one's position, such as
$ ! $ @[-.sys.vms]vmsbuild "" "" "" "" "TTY+CURSES"
$ !
$ ! Lua Version
$ luaver = "546"
$ luadotver = "5.4.6"
$ luaunderver = "5_4_6"
$
$ decc_dflt = f$trnlnm("DECC$CC_DEFAULT")
$ j = (decc_dflt.nes."") .and. 1
$ vsic_ = "CC" + f$element(j,"#","#/DECC") + "/NOLIST"
$ vaxc_ = "CC" + f$element(j,"#","#/VAXC") + "/NOLIST/OPTIMIZE=NOINLINE"
$ decc_ = "CC" + f$element(j,"#","#/DECC") + "/PREFIX=ALL/NOLIST"
$ gnuc_ = "GCC"
$ if f$type(gcc).eqs."STRING" then gnuc_ = gcc
$ gnulib = "gnu_cc:[000000]gcclib/Library" !(not used w/ vaxc)
$ ! common CC options (/obj=file doesn't work for GCC 1.36, use rename instead)
$ c_c_ = "/INCLUDE=([-.INCLUDE],[-.LIB.lua''luaver'.SRC])" -
+ "/DEFINE=(""LUA_USE_C89"",USE_FCNTL)"
$ cxx_c_ = "/INCLUDE=([-.INCLUDE],[-.LIB.LUA''luaver'.SRC])"
$ veryold_vms = f$extract(1,1,f$getsyi("VERSION")).eqs."4" -
.and. f$extract(3,3,f$getsyi("VERSION")).lts."6"
$ if veryold_vms then c_c_ = c_c_ + "/DEFINE=(""VERYOLD_VMS"")"
$ axp = (f$getsyi("CPU").ge.128) !f$getsyi("ARCH_NAME").eqs."Alpha"
$ ! miscellaneous setup
$ ivqual = %x00038240 !DCL-W-IVQUAL (used to check for ancient vaxc)
$ abort := exit %x1000002A
$ cur_dir = f$environment("DEFAULT")
$ vmsbuild = f$environment("PROCEDURE")
$ ! validate first parameter
$ p1 := 'p1'
$ if p1.eqs."" .and. (axp .or. decc_dflt.eqs."/DECC") then p1 = "DECC"
$ o_VSIC = 0
$ o_VAXC = 5 !(c_opt substring positions)
$ o_DECC = 10
$ o_GNUC = 15
$ o_LINK = 20
$ o_SPCL = 25
$ o_FETCHLUA = 33
$ o_BUILDLUA = 42
$ c_opt = f$locate("|"+p1, -
"|VSIC|VAXC|DECC|GNUC|LINK|SPECIAL|FETCHLUA|BUILDLUA")
$! write sys$output c_opt
$ if (c_opt/5)*5 .eq. c_opt then goto p1_ok
$ if (c_opt .eq. o_FETCHLUA) .OR. (c_opt .eq. o_BUILDLUA) then goto p1_ok
$ copy sys$input: sys$error: !p1 usage
%first arg is compiler option; it must be one of
"VSIC" -- use VSI C to compile everything
or "VAXC" -- use VAX C to compile everything
or "DECC" -- use DEC C to compile everything
or "GNUC" -- use GNU C to compile everything
or "LINK" -- skip compilation, just relink nethack.exe
or "SPEC[IAL]" -- just compile and link dlb.exe and recover.exe
or "FETCHLUA" -- skip compilation, just fetch lua from lua.org
or "BUILDLUA" -- build [-.lib.lua]lua'LUAVER'.olb
or "" -- carry out default operation (VAXC unless 'CC' is defined)
Note: if a DCL symbol for CC is defined, "VAXC" and "GNUC" are no-ops.
If the symbol value begins with "G" (or "g"), then the GNU C
library will be included in all link operations. Do not rebuild
dlb+recover with "SPECIAL" unless you have a CC symbol setup with
the proper options.
$ abort
$p1_ok:
$ ! validate second parameter
$ p2 := 'p2'
$ l_opt = f$locate("|"+p2, "|SHAREABLE|LIBRARY__|NONE_____|") !10
$ if (l_opt/10)*10 .eq. l_opt then goto p2_ok
$ copy sys$input: sys$error: !p2 usage
%second arg is C run-time library handling; it must be one of
"SHAREABLE" -- link with SYS$SHARE:LIBRTL.EXE/SHAREABLE
or "LIBRARY" -- link with SYS$LIBRARY:VAXCRTL.OLB/LIBRARY
or "NONE" -- explicitly indicate DECC$SHR
or "" -- default operation (use shareable image)
Note: for MicroVMS 4.x, "SHAREABLE" (which is the default) is required.
Specify "NONE" if using DEC C with a CC symbol overriding 1st arg.
$ abort
$p2_ok:
$ ! start from a known location -- [.sys.vms], then move to [-.-.src]
$ set default 'f$parse(vmsbuild,,,"DEVICE")''f$parse(vmsbuild,,,"DIRECTORY")'
$ set default [-.-.src] !move to source directory
$ ! compiler setup; if a symbol for "CC" is already defined it will be used
$ if f$type(cc).eqs."STRING" then goto got_cc
$ cc = vsic_ !assume "VSIC" requested or defaulted
$ cxx = "CXX"
$ if c_opt.eq.o_GNUC then goto chk_gcc !explicitly invoked w/ "GNUC" option
$ if c_opt.eq.o_DECC then cc = decc_
$ if c_opt.eq.o_VAXC then cc = vaxc_
$ if c_opt.ne.o_VSIC then goto got_cc !"SPEC" or "LINK", skip compiler check
$ ! we want to prevent function inlining with vaxc v3.x (/opt=noinline)
$ ! but we can't use noInline with v2.x, so need to determine version
$ set noOn
$ msgenv = f$environment("MESSAGE")
$ set message/noFacil/noSever/noIdent/noText
$ cc/noObject _NLA0:/Include=[] !strip 'noinline' if error
$ sts = $status
$ if sts then goto reset_msg !3.0 or later will check out OK
$ ! must be dealing with vaxc 2.x; ancient version (2.2 or earlier)
$ ! can't handle /include='dir', needs c$include instead
$ cc = cc - "=NOINLINE" - ",NOINLINE" - "NOINLINE,"
$ if sts.ne.IVQUAL then goto reset_msg
$ define/noLog c$include [-.INCLUDE]
$ c_c_ = "/DEFINE=(""ANCIENT_VAXC"")"
$ if veryold_vms then c_c_ = c_c_ - ")" + ",""VERYOLD_VMS"")"
$reset_msg:
$ set message 'msgenv'
$ set On
$ goto got_cc
$ !
$chk_gcc:
$ cc = gnuc_
$ ! old versions of gcc-vms don't have <varargs.h> or <stdarg.h> available
$ c_c_ = "/DEFINE=(""USE_OLDARGS"")"
$ if veryold_vms then c_c_ = c_c_ - ")" + ",""VERYOLD_VMS"")"
$ if veryold_vms then goto chk_gas !avoid varargs & stdarg
$ if f$search("gnu_cc_include:[000000]varargs.h").nes."" then -
c_c_ = "/DEFINE=(""USE_VARARGS"")"
$ if f$search("gnu_cc_include:[000000]stdarg.h").nes."" then -
c_c_ = "/DEFINE=(""USE_STDARG"")"
$chk_gas:
$ ! test whether this version of gas handles the 'const' construct correctly
$ gas_chk_tmp = "sys$scratch:gcc-gas-chk.tmp"
$ if f$search(gas_chk_tmp).nes."" then delete/noconfirm/nolog 'gas_chk_tmp';*
$ gas_ok = 0 !assume bad
$ on warning then goto skip_gas
$ define/user/nolog sys$error 'gas_chk_tmp'
$ mcr gnu_cc:[000000]gcc-as sys$input: -o _NLA0:
$DECK
.const
.comm dummy,0
.const
.comm dummy,0
$EOD
$ gas_ok = 1 !assume good
$ if f$search(gas_chk_tmp).eqs."" then goto skip_gas
$ ! if the error file is empty, gas can deal properly with const
$ gas_ok = f$file_attrib(gas_chk_tmp,"EOF") .eq. 0
$ delete/noconfirm/nolog 'gas_chk_tmp';*
$skip_gas:
$ on warning then continue
$ if .not.gas_ok then c_c_ = c_c_ - ")" + ",""const="")"
$ c_c_ = "/INCLUDE=[-.INCLUDE]" + c_c_
$ cxx_c_ = "/INCLUDE=[-.INCLUDE]" + cxx_c_
$ !
$got_cc:
$
$! not sure if 8.x DECC supports /NAMES=(AS_IS). Use next line, if so
$! if (c_opt.ne.o_VAXC) .and. (c_opt.ne.o_GNUC) .and. (c_opt.ne.o_DECC)
$ if (c_opt.ne.o_VAXC) .and. (c_opt.ne.o_GNUC)
$ then
$ c_c_ = c_c_ + "/NAMES=(AS_IS)
$ cxx_c_ = cxx_c_ + "/NAMES=(AS_IS)
$ endif
$ cc = cc + c_c_ !append common qualifiers
$ cxx = cxx + cxx_c_
$ if p3.nes."" then cc = cc + p3 !append optional user preferences
$ g := 'f$extract(0,1,cc)'
$ if g.eqs."$" then g := 'f$extract(1,1,cc)' !"foreign" gcc
$ if f$edit(f$extract(1,1,cc),"UPCASE").eqs."E" then g := X !GEMC
$ if g.nes."G" .and. c_opt.ne.o_GNUC then gnulib = ""
$ ! linker setup; if a symbol for "LINK" is defined, we'll use it
$ if f$type(link).nes."STRING" then link = "LINK/NOMAP"
$ if p4.nes."" then link = link + p4 !append optional user preferences
$ if f$trnlnm("F").nes."" then close/noLog f
$ create crtl.opt !empty
$ open/Append f crtl.opt
$ write f "! crtl.opt"
$ if c_opt.eq.o_DECC .or. c_opt.eq.o_VSIC .or. l_opt.eq.20
$ then $! l_opt=="none", leave crtl.opt empty (shs$share:decc$shr.exe/Share)
$ else
$ ! gnulib order: vaxcrtl.exe+gcclib.olb vs gcclib.olb+vaxcrtl.olb
$ if l_opt.eq.0 then write f "sys$share:vaxcrtl.exe/Shareable"
$ if gnulib.nes."" then write f gnulib
$ if l_opt.ne.0 then write f "sys$library:vaxcrtl.olb/Library"
$ endif
$ close f
$ if f$search("crtl.opt;-2").nes."" then purge/Keep=2/noLog crtl.opt
$ ! version ID info for linker to record in .EXE files
$ create ident.opt
$ open/Append f ident.opt
$ write f "! ident.opt"
$ write f "identification=""",version_number,""" !version"
$ close f
$ if f$search("ident.opt;-1").nes."" then purge/noLog ident.opt
$ ! final setup
$ nethacklib = "[-.src]nethack.olb"
$ create nethack.opt
! nethack.opt
nethack.olb/Include=(vmsmain)/Library
! lib$initialize is used to call a routine (before main()) in vmsunix.c that
! tries to check whether debugger support has been linked in, for PANICTRACE
sys$library:starlet.olb/Include=(lib$initialize)
! psect_attr=lib$initialize, Con,Usr,noPic,Rel,Gbl,noShr,noExe,Rd,noWrt,Long
! IA64 linker doesn't support Usr or Pic and complains that Long is too small
psect_attr=lib$initialize, Con,Rel,Gbl,noShr,noExe,Rd,noWrt
! increase memory available to RMS (the default iosegment is probably adequate)
iosegment=128
$ if f$search("nethack.opt;-2").nes."" then purge/Keep=2/noLog nethack.opt
$ milestone = "write sys$output f$fao("" !5%T "",0),"
$ if c_opt.eq.o_LINK then goto link !"LINK" requested, skip compilation
$ rename := rename/New_Vers
$ touch := set file/Truncate
$ makedefs := $sys$disk:[-.util]makedefs
$ show symbol cc
$ goto begin !skip subroutines
$!
$compile_file: !input via 'c_file'
$ no_lib = ( f$extract(0,1,c_file) .eqs. "#" )
$ if no_lib then c_file = f$extract(1,255,c_file)
$ if f$search("''c_file'.cpp").nes."" ! for regex
$ then
$ c_file = c_file + ".cpp"
$ compiler = "''cxx'"
$ else
$ c_file = c_file + ".c"
$ compiler = "''cc'"
$ endif
$ c_name = f$edit(f$parse(c_file,,,"NAME"),"LOWERCASE")
$ f_opts = "" !options for this file
$ if f$type('c_name'_options).nes."" then f_opts = 'c_name'_options
$ milestone " (",c_name,")"
$ if f$search("''c_name'.obj").nes."" then delete 'c_name'.obj;*
$ 'compiler' 'f_opts' 'c_file'
$ if .not.no_lib
$ then
$ libr/Obj/Replace 'nethacklib' 'c_name'.obj;0
$ endif
$ return
$!
$compile_list: !input via 'c_list'
$ nh_obj_list == ""
$ j = -1
$ c_loop:
$ j = j + 1
$ c_file = f$element(j,",",c_list) !get next file
$ if c_file.eqs."," then goto c_done
$ gosub compile_file
$ goto c_loop
$ c_done:
$ return
$fetchlua:
$ create/dir [-.lib]
$ set def [-.lib]
$ on error then goto luafixdir
$ pipe -
if f$search("lua''luaver'.tar.gz").eqs."" then -
curl http://www.lua.org/ftp/lua-'luadotver'.tar.gz -
--output lua'luaver'.tgz && -
if (f$search("lua''luaver'.tar").eqs."") .AND. -
(f$search("lua''luaver'.tgz").nes."") then -
gzip -d lua'luaver'.tgz && -
if f$search("lua''luaver'.tar").nes."" then -
tar -xf lua'luaver'.tar && -
if (f$search("lua-''luaunderver'.DIR;1").nes."") .AND. -
(f$search("lua''luaver'.dir;1").eqs."") then -
rename lua-'luaunderver'.DIR;1 lua'luaver'.dir;1
$ milestone "[-.lib.lua'''luaver']"
$luafixdir:
set def [-.src]
$ if f$search("[-.include]nhlua.h;-1").nes."" then -
purge [-.include]nhlua.h
$ if f$search("[-.include]nhlua.h").nes."" then -
delete [-.include]nhlua.h;
$ milestone " (wiped existing [-.include]nhlua.h)"
$ exit
$!
$! 3.7 runtime LUA level parser/loader
$!
$buildlua:
$ if f$search("[-.lib]lua.dir;").eqs."" then -
create/dir [-.lib.lua]
$ save_nethacklib = nethacklib
$!
$! Temporarily override the value of nethacklib so that
$! the lua modules go into the lua library, not nethacklib.
$!
$ nethacklib = "[-.lib.lua]lua''luaver'.olb"
$ if f$search("''nethacklib'").eqs."" then -
libr/Obj 'nethacklib'/Create
$ if f$search("''nethacklib';-1").nes."" then -
purge 'nethacklib'
$ c_list = "[-.lib.lua''luaver'.src]lapi,[-.lib.lua''luaver'.src]lauxlib" -
+ ",[-.lib.lua''luaver'.src]lbaselib" -
+ ",[-.lib.lua''luaver'.src]lcode,[-.lib.lua''luaver'.src]lcorolib" -
+ ",[-.lib.lua''luaver'.src]lctype,[-.lib.lua''luaver'.src]ldblib" -
+ ",[-.lib.lua''luaver'.src]ldebug,[-.lib.lua''luaver'.src]ldo" -
+ ",[-.lib.lua''luaver'.src]ldump,[-.lib.lua''luaver'.src]lfunc" -
+ ",[-.lib.lua''luaver'.src]lgc,[-.lib.lua''luaver'.src]linit" -
+ ",[-.lib.lua''luaver'.src]liolib,[-.lib.lua''luaver'.src]llex" -
+ ",[-.lib.lua''luaver'.src]lmathlib,[-.lib.lua''luaver'.src]lmem" -
+ ",[-.lib.lua''luaver'.src]loadlib,[-.lib.lua''luaver'.src]lobject" -
+ ",[-.lib.lua''luaver'.src]lopcodes,[-.lib.lua''luaver'.src]loslib" -
+ ",[-.lib.lua''luaver'.src]lparser,[-.lib.lua''luaver'.src]lstate" -
+ ",[-.lib.lua''luaver'.src]lstring,[-.lib.lua''luaver'.src]lstrlib" -
+ ",[-.lib.lua''luaver'.src]ltable,[-.lib.lua''luaver'.src]ltablib" -
+ ",[-.lib.lua''luaver'.src]ltm,[-.lib.lua''luaver'.src]lundump" -
+ ",[-.lib.lua''luaver'.src]lutf8lib,[-.lib.lua''luaver'.src]lvm" -
+ ",[-.lib.lua''luaver'.src]lzio"
$ gosub compile_list
$ milestone " ''nethacklib'"
$ luafinish:
$ nethacklib = save_nethacklib
$ return
$begin:
$ if (c_opt .eq. o_FETCHLUA) .OR. (c_opt .eq. o_BUILDLUA)
$ then
$ if c_opt .eq. 33 then gosub fetchlua
$ if c_opt .eq. 42 then gosub buildlua
$ goto done
$ endif
$!
$! Check some prerequisites
$!
$ if f$search("[-.lib]lua''luaver'.dir").eqs.""
$ then
$ write sys$output "You need to: @vmsbuild fetchlua
$ exit
$ endif
$ if f$search("[-.lib.lua]lua''luaver'.olb").eqs.""
$ then
$ write sys$output "You need to: @vmsbuild buildlua
$ exit
$ endif
$!
$! miscellaneous special source file setup
$!
$! default to using cppregex
$ if f$search("regex.c").eqs."" then -
copy [-.sys.share]cppregex.cpp []regex.cpp
$! if f$search("random.c").eqs."" then copy [-.sys.share]random.c []*.*
$ if f$search("tclib.c") .eqs."" then -
copy [-.sys.share]tclib.c []*.*
$!
$ p5 := 'p5'
$ ttysrc = "[-.win.tty]getline,[-.win.tty]termcap" -
+ ",[-.win.tty]topl,[-.win.tty]wintty"
$ cursessrc = "[-.win.curses]cursdial,[-.win/curses]cursmesg" -
+ ",[-.win.curses]cursinit,[-.win.curses]cursmisc" -
+ ",[-.win.curses]cursinvt,[-.win.curses]cursstat" -
+ ",[-.win.curses]cursmain,[-.win.curses]curswins"
$ interface = ttysrc !default
$ if p5.eqs."CURSES" then interface = cursessrc
$ if p5.eqs."TTY+CURSES" then interface = ttysrc + "," + cursessrc
$ if p5.eqs."CURSES+TTY" then interface = cursessrc + "," + ttysrc
$
$ if f$search("[-.include]nhlua.h").eqs.""
$ then
$ create [-.include]nhlua.h !empty
$ set file/att=(RFM:STM) [-.include]nhlua.h
$ open/Append f [-.include]nhlua.h
$ write f "/* nhlua.h - generated by vmsbuild.com */"
$ write f "#include ""[-.lib.lua''luaver'.src]lua.h"""
$ write f "LUA_API int (lua_error) (lua_State *L) NORETURN;"
$ write f "#include ""[-.lib.lua''luaver'.src]lualib.h"""
$ write f "#include ""[-.lib.lua''luaver'.src]lauxlib.h"""
$ write f "/*nhlua.h*/"
$ close f
$ endif
$ milestone " ([-.include]nhlua.h)"
$!
$! create object library
$!
$ if c_opt.ne.o_SPCL .or. f$search(nethacklib).eqs."" then -
libr/Obj 'nethacklib'/Create=(Block=3000,Hist=0)
$ if f$search("''nethacklib';-1").nes."" then purge 'nethacklib'
$!
$! compile and link makedefs, then nethack, dlb+recover.
$!
$ milestone "<compiling...>"
$!
$ c_list = "[-.sys.vms]vmsmisc,[-.sys.vms]vmsfiles,[]alloc,dlb," -
+ "monst,objects,date,#[-.util]panic"
$ if c_opt.eq.o_SPCL then c_list = c_list + ",decl,drawing"
$ gosub compile_list
$ if c_opt.eq.o_SPCL then goto special !"SPECIAL" requested, skip main build
$ set default [-.util]
$ c_list = "#makedefs"
$ gosub compile_list
$ link makedefs.obj,[-.src]panic.obj,'nethacklib'/Lib,[-.src]ident.opt/Opt,[-.src]crtl/Opt
$ milestone "makedefs"
$! create some build-time files
$! 3.7 does not require these
$! makedefs -p !pm.h
$! makedefs -o !onames.h
$! makedefs -v !date.h
$ milestone " (*.c)"
$ set default [-.src]
$! compile most of the source files:
$ c_list = "decl,version,[-.sys.vms]vmsunix" -
+ ",[-.sys.vms]vmstty,[-.sys.vms]vmsmail" -
+ ",[]isaac64" - !already in [.src]
+ ",[]tclib,[]regex" !copied from [-.sys.share]
$ gosub compile_list
$ c_list = interface !ttysrc or cursessrc or both
$ gosub compile_list
$ c_list = "allmain,apply,artifact,attrib,ball,bones,botl,calendar,cmd" -
+ ",coloratt,dbridge,dothrow,drawing,detect,dig,display,do,do_name" -
+ ",do_wear,dog,dogmove,dokick,dungeon,eat,end,engrave,exper,explode" -
+ ",extralev,files,fountain,getpos,glyphs"
$ gosub compile_list
$ c_list = "hack,hacklib,insight,invent,light,lock,mail,makemon" -
+ ",mcastu,mdlib,mhitm,mhitu,minion,mklev,mkmap,mkmaze" -
+ ",mkobj,mkroom,mon,mondata,monmove,mplayer,mthrowu,muse" -
+ ",music"
$ gosub compile_list
$!
$! Files added in 3.7 for Lua glue
$!
$ c_list = "nhlua,nhlobj,nhlsel"
$ gosub compile_list
$ c_list = "o_init,objnam,options,pager,pickup" -
+ ",pline,polyself,potion,pray,priest,quest,questpgr,read" -
+ ",rect,region,report,restore,rip,rnd,role,rumors,save,selvar" -
+ ",sfstruct,shk,shknam,sit,sounds,sp_lev,spell,stairs,steal" -
+ ",steed,strutil,symbols,sys,teleport,timeout,topten,track" -
+ ",trap,u_init,utf8map"
$ gosub compile_list
$ c_list = "uhitm,vault,vision,weapon,were,wield,windows" -
+ ",wizard,wizcmds,worm,worn,write,zap"
$ gosub compile_list
$!
$link:
$! We do these at the end
$ c_list = "#[-.sys.vms]vmsmain,#date"
$ gosub compile_list
$ milestone "<linking...>"
$ link /EXECUTABLE=nethack.exe vmsmain.obj,date.obj-
+[-.src]nethack.olb/library -
+sys$disk:[-.lib.lua]lua546.olb/library
$ milestone "NetHack"
$ if c_opt.eq.o_LINK then goto done !"LINK" only
$special:
$!
$! utilities only [dgn_comp and lev_comp are gone]
$!
$ set default [-.util]
$ c_list = "#panic,#dlb_main,#recover"
$ gosub compile_list
$ link/exe=dlb.exe dlb_main.obj,-
panic.obj,'nethacklib'/Lib,[-.src]ident.opt/Opt,[-.src]crtl.opt/Opt
$ milestone "dlb"
$ link/exe=recover.exe recover.obj,-
'nethacklib'/Lib,[-.src]ident.opt/Opt,[-.src]crtl.opt/Opt
$ milestone "recover"
$!
$done:
$ set default 'cur_dir'
$ exit