1               Instructions for Building and Installing NetHack 3.6
2                     on a VMS (aka OpenVMS) system
3               =========================================
4
50.  Please read this entire file before trying to build or install
6    NetHack, then read it again!
7
81.  NetHack 3.6 was built and tested on OpenVMS on both the Integrity
9    and Alpha platform using the HP C V7.3 for OpenVMS compiler.  While
10    not tested, older versions of DEC C will most likely work as compatibility
11    with older systems is a goal of the VMS porting team.   Unfortunatly,
12    ancient VAX C probably will no longer work.  The set of Makefiles provided
13    are known to be out of date; use vmsbuild.com instead.
14
152.  Make sure all the NetHack files are in the appropriate directory
16    structure.  You should set up a directory--referred to as "top" below
17    and in some of the assorted files, but which may be a subdirectory--
18    that has these subdirectories
19        [.dat]          -- data files
20        [.doc]          -- documentation files
21        [.include]      -- C header files
22        [.src]          -- primary source files
23        [.sys]          -- parent for [.sys.*]
24        [.sys   .share] -- files shared by several ports, including VMS
25        [.sys   .vms]   -- VMS-specific source and support files
26        [.util]         -- sources for essential utility programs
27        [.win]          -- parent for [.win.*]
28        [.win   .tty]   -- "window" routines for ordinary terminals
29                           (including terminal windows on workstations)
30    The following subdirectories may be present, but are not useful for
31    building NetHack on VMS and are not required:
32        [.sys   .amiga] -- AmigaDOS
33        [.sys   .atari] -- Atari TOS
34        [.sys   .be]    -- BeBox BeOS
35        [.sys   .mac]   -- Macintosh
36        [.sys   .msdos] -- MSDOS for IBM PCs and compatibles
37        [.sys   .os2]   -- OS/2
38        [.sys   .share   .sounds] -- AIFF format audio files
39        [.sys   .unix]  -- guess :-)
40        [.sys   .unix    .hints] -- configuration data for setup.sh
41        [.sys   .wince] -- Windows CE
42        [.sys   .wince   .ceinc] -- more WinCE
43        [.sys   .wince   .ceinc   .sys] -- ditto
44        [.sys   .winnt] -- Windows NT
45        [.win   .curses] - window routines for curses interface
46        [.win   .gem]   -- window routines for Atari/GEM
47        [.win   .gnome] -- window routines for Unix/GNOME
48        [.win   .Qt]    -- window routines for Qt
49        [.win   .share] -- "tile" graphic support
50        [.win   .win32] -- Windows NT and Windows CE
51        [.win   .X11]   -- window routines for X-Windows; requires X11R4
52                           or later and MIT's Athena Widget set
53    You must arrange things in this structure or the supplied procedures
54    and instructions in this file will not work properly.  Several DCL
55    command files are present in the [.sys.vms] subdirectory and will not
56    work as intended if they are moved elsewhere.  The file called Files
57    in the top directory contains lists of everything that should be in
58    each subdirectory, including things that are constructed as NetHack
59    is being built.
60
613.  Prior to beginning compilation, go to the [.include] subdirectory and
62    edit vmsconf.h according to its comments.  You should set Local_WIZARD
63    and Local_HACKDIR to appropriate values, and you might want to define
64    TEXTCOLOR if you have any color VAXstations or color terminals which
65    handle ANSI-format escape sequences to set foreground and background
66    color for text characters.  (VT241/VT340 color graphics won't work.)
67    Other things which may be of interest are SECURE if you intend to
68    set up NetHack as an installed image which is granted privileges, and
69    SHELL which should be disabled if you intend to allow captive accounts
70    to run NetHack.  You may also want to edit file config.h, but that's
71    only necessary if you want or need to disable some of the game options.
72    The distributed copy of config.h will work successfully on VMS;
73    vmsconf.h has conditional code to deal with the UNIX-specific items.
74
754.  vmsbuild.com checks for several source files in [.util] and if it doesn't
76    find them, it uses [.sys.vms]spec_lev.com to generate them.  If you have
77    the programming utilities lex or flex and yacc or bison, they be will
78    used if symbols are set up to run them.  Or if you have them but do not
79    have symbols set up, you may edit spec_lev.com to have it run them.
80    If neither of those situations applies, spec_lev.com will default to
81    copying pre-genearated versions of the appropriate files (dgn_lex.c,
82    lev_lex.c, dgn_yacc.c, lev_yacc.c, dgn_comp.h, and lev_comp.h) from
83    [.sys.share] into [.util]*.c and [.include]*.h.
84
85    Once the file lev_yacc.c is in place, vmsbuild.com won't execute
86    spec_lev.com to make any of them, so if you decide to modify *_comp.l
87    and/or *_comp.y then you'll either need to execute spec_lev.com before
88    vmsbuild.com or remove [.util]lev_yacc.c so vmsbuild.com will do so.
89
90    If you use the versions of the lex and yacc utilities from the OpenVMS
91    freeware CD, you will need to pass "/Define=_DECC_V4_SOURCE" as the
92    third argument to vmsbuild.com in step #5.  The version of yacc
93    or bison in that distribution places '#include <stdlib.h>' in the
94    generated code, before NetHack's '#include "config.h"', leading to
95    conflicts that prevent compilation from completing.
96
975.  To build NETHACK.EXE and its auxiliary programs, execute the
98    following DCL command:
99       $ @[.SYS.VMS]VMSBUILD          !defaults to CC, either VAXC or DECC
100    or $ @[.SYS.VMS]VMSBUILD "GNUC"   !force "GCC"
101    It can take quite a bit of time for a full build to complete.  Around
102    an hour on a Alphastation 200 and 5 minutes on a modern IA64 system.
103    vmsbuild.com will display some feedback as it executes; generally
104    this will be the name of each source file that's about to be compiled
105    or the name of the executable that has just been linked.
106
1076.  If you have already started (or finished) a build and decide to start
108    over with a different compiler, you should DELETE [.SRC]CRTL.OPT;*
109    first.
110
1117.  After compilation, it's time to perform installation.  Go back to
112    the top directory.  Either edit [.sys.vms]install.com to indicate
113    where you want everything to be installed, or specify the location
114    and "playground" owner on the command line.  Then execute either
115       $ @[.SYS.VMS]INSTALL
116    or $ @[.SYS.VMS]INSTALL location owner
117    where location is a device:[directory] specification and owner is
118    either a rights identifier or UIC.  If install.com is not modified
119    and if values aren't supplied on the command line, the default values
120    used are the translation of logical name HACKDIR, if any, or else
121    [.PLAY] (relative to the current directory), and the UIC for the
122    current process.  install.com will use the auxiliary programs
123    constructed by vmsbuild.com to process quite a few data files in the
124    [.dat] subdirectory.  Then it will create the playground directory,
125    if necessary, plus the associated [.save] subdirectory.  Next it will
126    copy the data files into the playground; this step can take a while.
127    Finally it will copy nethack.exe and a few additional support files.
128
129    After it completes, the files [.src]nethack.olb, [.src]nethack.exe,
130    [.util]*.obj, [.util]*_comp.exe, and [.util]makedefs.exe can be
131    deleted in order to save disk space if desired.  The other program,
132    [.util]recover.exe, should not be deleted unless you make a copy of
133    it somewhere--perhaps in the playground directory--first.  It can be
134    used to resurrect some games disrupted by system or program crash.
135
1368.  The file nethack.com which is copied to the playground directory can
137    be used to invoke NetHack, or nethack.exe can be run directly.  Most
138    of the command-line options specified in the Unix man-page (file
139    [.doc]nethack.txt) are also applicable to VMS.  Some comments at the
140    beginning of nethack.com illustrate several of the options.  New
141    players should read the file "Guidebook.txt" which will be copied
142    into the playground directory as "Guidebook.doc".
143
144
145Notes:
146
1470.  Version 3.5.x was never publicly released.
148
1491.  Save files and bones files from 3.4.x and earlier versions
150    will not work with 3.6.6, but save files and bones file from 3.6.0,
151    through 3.6.5 should work. The scoreboard file (RECORD) from 3.6.x
152    or 3.4.x or 3.3.x will work.
153
1542.  If pline.c fails to compile, edit vmsconf.h and uncomment
155    #define NO_VSNPRINTF
156    to avoid calling a C library routine that wasn't available on older
157    versions of VMS.  (Note:  in the distributed sources, this has already
158    been uncommented.)
159
1603.  To specify user-preference options in your environment, define the
161    logical name NETHACKOPTIONS to have the value of a quoted string
162    containing a comma separated list of option values.  The option names
163    are case-insensitive.
164       $ define nethackoptions "noAutoPickup,Dog:Rover,Cat:Felix,DECgraphics"
165    One value you'll probably want to specify is "noLegacy" to turn off
166    the initial introductory passage.  The "checkpoint" option controls
167    whether or not enough data is saved to disk so that the set of level
168    files left behind after a crash contains sufficient information for
169    recover.exe to be able to construct a save file after the fact.  The
170    tradeoff for enabling checkpoint is that using it makes level changes
171    do more I/O and take longer.  The "menustyle" option controls some
172    aspects of the user interface, and can be set to "menustyle:traditional"
173    to make nethack behave more like older versions.
174
175    If logical name or DCL symbol NETHACKOPTIONS is not defined, NetHack
176    will try HACKOPTIONS instead.  Regardless of whether or not either
177    is defined, it will also try to find a configuration file containing
178    additional option settings.  If the value of the translation of
179    NETHACKOPTIONS--or HACKOPTIONS--begins with an "@" character then the
180    rest of the translation is assumed to be the name of the configuration
181    file.  Otherwise, the following are tried:  file specified by logical
182    name NETHACKINI, file SYS$LOGIN:NETHACK.INI, and file HOME:NETHACK.CNF
183    (note that the C run-time library sets up the value of HOME to match
184    sys$login).  Syntax for the configuration file is similar to
185    NETHACKOPTIONS, but multiple lines can be used, each must start with
186    OPTIONS=, and comments can be included by placing '#' in the first
187    column.  Several options which take more complex values (graphics
188    representation) can also be present; see the "Guidebook" for details.
189    (Guidebook.txt can be found in the [.doc] subdirectory; a copy gets
190    placed in the playground directory by install.com.  Also, an example
191    configuration file can be found in [.win.X11]nethack.rc.)
192
1934.  [As mentioned above, the set of Makefiles is out of date so disregard
194    this note....]
195    Instead of using vmsbuild.com to compile and link everything, you can
196    use the set of Makefiles found in the vms subdirectory, provided you
197    have an appropriate and compatible make utility.  They've been tested
198    using MMK, a freeware clone of Digital's MMS.  There are five of them,
199    and the suffix or filetype on their names indicates where they should
200    be placed.
201       $ copy [.sys.vms]Makefile.top []Makefile.
202       $ copy [.sys.vms]Makefile.src [.src]Makefile.
203       $ copy [.sys.vms]Makefile.utl [.util]Makefile.
204       $ copy [.sys.vms]Makefile.dat [.dat]Makefile.
205       $ copy [.sys.vms]Makefile.doc [.doc]Makefile.
206    After doing that, edit [.src]Makefile and [.util]Makefile to specify
207    pertinent compiler options in CFLAGS, linker options in LFLAGS, and
208    libraries in LIBS and/or MORELIBS if the default values aren't right.
209    Be sure to make compatible compilation and linking settings in both
210    files.  While in there, edit [.util]Makefile to specify the appropriate
211    values for lex and yacc, _or_ move to that directory and use MMS or
212    make to build targets no_lex and no_yacc which will copy several
213    pre-processed files from [.sys.share] into [.util].  Finally, edit
214    Makefile in the top directory to specify values for GAMEDIR and
215    GAMEOWNER.  This top Makefile invokes [.sys.vms]install.com to do
216    much of the actual installation work, so if you want to make any
217    customizations or file protection changes, edit install.com to suit.
218    Also set MAKE in all of the Makefiles to the appropriate command if
219    not using MMS or MMK.
220
221    Once the Makefiles are tailored for your site, give the command
222       $ mms all,install
223    or $ make all install
224    To compile and install everything.  The object files compiled via
225    the Makefiles are left as individual .OBJ files rather than placed
226    into an object library (in contrast to step #7 above and note #10
227    below).  These Makefiles are provided on an as-is basis; vmsbuild.com
228    is the preferred way to compile because it's guaranteed to compile
229    and link everything.
230
231    [Note:  Makefile.* have been updated occasionally but not exercised
232    for a long time, so might not be in working order.]
233
2345.  termcap is an ASCII data file containing descriptions of terminal
235    capabilities and the escape sequences that software must use to take
236    advantage of them.  If you do not already have a termcap file in use
237    on your system there is a small one in file [.SYS.SHARE]TERMCAP.  It
238    contains definitions for common Digital terminals, also suitable for
239    most clones and emulators.  This file is copied into the playground
240    by install.com, and NetHack will use it if it can't find any other
241    one.  NetHack uses the following sequence to attempt to locate the
242    termcap file:  translation of the logical name TERMCAP (used as-is),
243    file NETHACKDIR:TERMCAP, similar file HACKDIR:TERMCAP, GNU-Emacs file
244    EMACS_LIBRARY:[ETC]TERMCAP.DAT, file []TERMCAP, and lastly file
245    $TERMCAP (which most likely would be a logical name).  If NetHack
246    can't find the termcap file, or if the above search sequence finds a
247    different one than you'd prefer, then use the DCL ASSIGN or DEFINE
248    command to define a value for logical name TERMCAP.
249
250    NetHack also tries fairly hard to figure out what kind of terminal
251    you're using.  It checks for logical names (or symbols) NETHACK_TERM,
252    HACK_TERM, EMACS_TERM, and lastly TERM.  The last is set up by the
253    C run-time library and you cannot use a logical name or symbol for
254    it.  If all those fail, or if whichever one succeeds has a value of
255    "undefined" or "unknown" (which can happen under VMS V5.4-* and
256    V5.5-* for VT420 terminals), NetHack will query the VMS TERMTABLE
257    database used by the SMG library routines.  Whatever value NetHack
258    eventually comes up with needs to be the name of an entry in the
259    termcap file, otherwise a message about "Unknown terminal type" will
260    be printed and NetHack will exit.
261
2626.  Both vmsbuild.com and Makefile.src have provisions to build NetHack's
263    'curses' interface, but the source code for it won't compile using
264    the implementation of curses which is supplied with VMS (either the
265    VMS-specific variant or the BSD-derived one).  It requires 'ncurses'
266    or 'PDcurses'.
267
2687.  NetHack contains code which attempts to make it secure in case it's
269    installed with privileges (to allow the playground to be protected
270    against world write access).  This has only undergone limited testing,
271    so install NetHack with privileges at your own risk.  If you discover
272    any potential security holes, please let us know so that we can take
273    steps to correct the problem(s).  NetHack always includes filename
274    punctuation when accessing files, so that it should never be affected
275    by inadvertent or malicious logical name definitions, and it always
276    deactivates installed privileges prior to spawning a subprocess.
277
278    Note to end users:  "installing with privileges" is an option for
279    system managers who set up system-wide access to the game.  Since
280    CMKRNL privilege and modification of the system boot routines are
281    both required, it is not an option for ordinary users.  There are
282    no explicit instructions on how to do such an installation, because
283    only system managers who are already familiar with the process and
284    its potential security ramifications should even consider it.
285
286    The default setup by install.com assumes no privileges and uses
287    world-writable files to allow arbitrary users to play.  This is
288    NOT secure and not advisable in any environment where there are
289    untrustworthy users, but works fine for many sites.  If you allow
290    users to run NetHack from captive accounts (VMS 5.1-* or earlier)
291    or from restricted accounts (5.2 and later), you should either make
292    sure that they do not have TMPMBX privilege or else disable NetHack's
293    ability to spawn an interactive subprocess.  To disable subprocesses,
294    disable the "!" (shell escape) command by commenting out the definition
295    of SHELL in vmsconf.h prior to building the program.  This necessity
296    may be removed in some future release, where NetHack will check for
297    captive accounts instead of spawning unconditionally.  Note that
298    disabling the SHELL command also prevents spawning MAIL when scrolls
299    of new mail are received.
300
301    In order for installed privileges to be used at all, the value of
302    HACKDIR (via Local_HACKDIR in vmsconf.h) compiled into the program
303    must correspond to the actual playground directory.  If logical name
304    HACKDIR (or NETHACKDIR) is used to override that value, installed
305    privileges will be deactivated unless its value corresponds to the
306    same device and directory as the internal value.  If that internal
307    value contains a logical name, only an executive-mode translation
308    will be honored; if there is no such translation, installed privs
309    will be deactivated.
310
311    To be able to install nethack.exe with privileges (SYSPRV or GRPPRV,
312    perhaps EXQUOTA, depending on site usage and needs), you'll need to
313    link it with debugging and tracebacks both disabled.  You can do this
314    by specifying an argument to vmsbuild.com when performing step #6
315    above; pass it "/noTrace/noDebug" as the 4th parameter.
316       $ @[.SYS.VMS]VMSBUILD "" "" "" "/noTrace/noDebug"
317    /Trace/noDebug is the linker's normal default.  If you've already
318    built NetHack, you can relink with tracebacks disabled by doing
319       $ @[.SYS.VMS]VMSBUILD "LINK" "" "" "/noTrace/noDebug"
320
3218.  If you can't or won't install nethack.exe with privileges and if you
322    don't have access to a privileged account yourself, then if you intend
323    to allow other users to access your copy of NetHack you should probably
324    place an ACL on the playground directory and its save subdirectory.
325    The access control list should contain a default protection ACE which
326    grants delete+control access to the playground owner (ie, your own
327    account if there's no special games account involved).  install.com
328    does not attempt to do this automatically at the present time.  After
329    executing install.com to create the playground directory, perform a
330    pair of commands similar to the following
331       $ SET ACL/ACL=(IDENT=your_id, OPTIONS=DEFAULT, ACCESS=R+W+E+D+C) -
332       $_ device:[playground's.parent.directory]playground.DIR
333       $ SET ACL/ACL=(IDENT=your_id, OPTIONS=DEFAULT, ACCESS=R+W+E+D+C) -
334       $_ device:[playground.directory]SAVE.DIR
335    The two commands use the same options, but SET ACL won't accept a
336    list of files to modify.  (For recent versions of VMS, SET ACL was
337    made obsolete in favor of SET FILE/ACL, which in turn has been made
338    obsolete in favor of SET SECURITY/CLASS=FILE/ACL; however, the older
339    forms will still work.)  'your_id' should be the rights identifier
340    which corresponds to the account which should retain access to those
341    files; 'device:[playground's.parent.directory]' is the name of the
342    parent directory for the playground (ie, if your playground directory
343    is disk$foo:[me.games.nethack.play], then you want to specify
344    disk$foo:[me.games.nethack]play.dir on the SET ACL command), and
345    'device:[playground.directory]' is the playground itself.  Those ACLs
346    establish a default protection scheme such that every newly created
347    file in those directories will have an ACL attached to it, and the
348    attached ACL will grant 'your_id' full access to the corresponding
349    file.  That should allow you to clear away level files from aborted
350    games, and to delete old save files if necessary.  It will not enable
351    you to run recover.exe on behalf of other users, because you won't be
352    able to create files owned by them unless you have elevated privileges.
353
3549.  Many NetHack commands can be aborted by sending it the <escape>
355    character when it wants input.  This is displayed as ESC inside the
356    game.  Digital VK201 keyboards (used by VT2xx and VT3xx and older
357    VAXstations) and VK401 keyboards (used by VT4xx, newer VAXstations,
358    and DEC's X Terminals) do not have an <escape> key.  They may
359    transmit <escape> for the <F11> key if the terminal or emulator
360    window is set to operate in VT100 mode, or there may be a setup-type
361    option for making the <` | ~> key behave as <escape>.  If your
362    terminal does not have that, or if it's set to a mode where that
363    won't work, then just use <ctrl/[> instead.  (Press the "[" key while
364    holding down the "Ctrl" key, then release both; <escape> and <ctrl/[>
365    have the same ASCII code and are indistinguishable once they reach
366    the computer; note that VAXstations and X Terminals _can_ tell the
367    difference, but that won't matter for NetHack.)
368
369    VMS NetHack is configured to use the SYS$QIOW system service for
370    reading characters from the keyboard.  This allows ^C and ^Y (as well
371    as ^X and ^O for wizard mode debugging) to be used as commands without
372    being intercepted or interpreted by the terminal driver.  The code
373    which parses arrow and function keys is not perfect, and it's possible
374    to get strange results if you hold such keys down or just type too
375    quickly, particularly on slow multiplexor lines.  Those keys are
376    never needed in actual play, and most function keys are just treated
377    as <escape> for use in aborting partial commands.
378
379    VMS NetHack also still has code to use SMG$READ_KEYSTROKE instead.
380    That can be activated by modifying vmsconf.h and recompiling, but
381    it should never be necessary.  If you use it, you'll need to press
382    either <esc> or <ctrl/[> twice to abort partial commands, or else
383    press an arbitrary function key, such as <PF4>, once.
384
385    If SUSPEND is defined in vmsconf.h, <ctrl/Z> is used for that command.
386    Since Unix-style job control is not available, it's used for connecting
387    to the parent process if NetHack is running in a subprocess.  When not
388    in a subprocess, it doesn't do anything except give a message to the
389    effect that it's not doing anything....  The suspend command does not
390    save the current game; if you use ^Z to attach to your parent process,
391    be sure to remember to eventually reattach to the NetHack subprocess;
392    otherwise the game in progress won't get saved when you logout.
393
39410. NetHack optionally maintains a logfile which receives one line appended
395    to it whenever a game ends.  This can be disabled entirely by adding
396    an "#undef LOGFILE" directive to vmsconf.h prior to building the
397    program, or it can be disabled later by removing the file(s) LOGFILE.;*
398    from the playground directory.  If not disabled prior to compilation,
399    the logfile can be reinitialized by simply creating an empty file
400    named LOGFILE in the playground, but make sure that users are able
401    to write into it, or new entries will not be appended.  A somewhat
402    more elaborate log file named XLOGFILE containing more information is
403    handled similarly.
404
40511. Some attempt at support for VMS versions earlier than V4.6 has been
406    included, but no such obsolete system was available for testing it.
407    vmsbuild.com detects the need for the extra support routines and
408    arranges automatically for them to be compiled.  The reason that
409    special support is needed is that the C Run-Time Library (VAXCRTL)
410    underwent a major revision for VMS V4.6 and several routines which
411    NetHack utilizes were not available prior to that upgrade.
412
413    [That was written many years ago and the chance of it still working
414    is very small.]
415
41612. vmsbuild.com collects almost all of the object files (xxx.OBJ) into
417    an object library (NETHACK.OLB) as it compiles the source files.
418    This should prevent the quota-exceeded problems from the linker
419    that some sites have reported for prior versions.  Note that if you
420    compile any source files manually, you'll need to replace those
421    modules in the object library prior to linking the program:
422       $ cc/include=[-.include] [-.sys.vms]vmstty   !for example
423       $ libr/obj []nethack vmstty                  !replace VMSTTY
424       $ @[-.sys.vms]vmsbuild LINK                  !re-link NETHACK.EXE
425    If you forget to replace the library entry, your newly compiled code
426    will not be included in the new executable image.
427
42813. To access "wizard mode"--intended for debugging purposes, not to
429    spoil the game with unlimited wishes--you must be running from the
430    username compiled into the game via Local_WIZARD in vmsconf.h, and
431    you must specify "-D" on the command line when invoking NetHack.
432    Note that -D must be uppercase, and it must be in quotes to prevent
433    the C run-time library's program startup code from converting it into
434    lowercase.
435       $ @hackdir:nethack "-D"
436    Any character name you specify will be ignored in favor of "wizard".
437
438    [More out of date information.  Rather than compile-time Local_WIZARD,
439    users(s) allowed to run in wizard mode are now controlled by the entry
440    WIZARDS in the file SYSCONF.]
441
44214. At program startup time, NetHack uses the empty file PERM to prevent
443    two different processes from using the same character name (under the
444    same UIC ownership) at the same time.  It does this by temporarily
445    giving that file a second directory entry named PERM.LOCK, then
446    removing the alternate entry once started.  If the PERM file is
447    missing or inaccessible, NetHack will give a message and then quit.
448    Several possible messages and their usual causes are:
449       Can't find file perm;1 to lock!
450    PERM.;1 is missing from the playground directory.  Fix:  reinstall
451    the playground directory using install.com, or use CREATE or an editor
452    to make an empty file named PERM.  Version number must be 1.
453       Can't lock perm;1 due to directory protection.
454    The playground directory is not allowing write access.  Fix:  players
455    need to be able to write files for dungeon levels and "bones" into
456    the playground directory.  Set the protection or ACL on the xxx.DIR;1
457    file in the playground's parent directory to allow write access.
458       Can't unlink perm.lock;1.
459    The empty file PERM.;1 is protected against delete access; only matters
460    under some versions of VMS.  Fix:  set the protection or ACL on PERM.;1
461    to allow delete access to players.  Under VMS V5.5-2, delete access is
462    not necessary.  PERM does not have to remain writable.
463       Waiting for access to perm;1.  (# retries left).
464    If some other process is also starting up NetHack at about the same
465    time, you may have to wait a short period.  NetHack will retry once
466    per second, counting down to 0.  If 0 is reached, the message
467       Perhaps there is an old perm.lock;1 around?
468    will be displayed and then NetHack will give up.  Fix:  to forcibly
469    remove a stale PERM.LOCK entry, issue the following command
470       $ SET FILE/REMOVE PERM.LOCK;1
471    from the playground directory.  The file PERM should remain intact.
472    Do not use that command for real files, only alternate directory
473    entries.  If output from a DIRECTORY command on the playground reports
474       PERM.LOCK;1          no such file
475    then someone has deleted PERM.;1 while the synonym entry was still
476    in place, and PERM.LOCK was left as a dangling name which no longer
477    points at any file.  The SET FILE/REMOVE command above will fix the
478    dangling name; a new PERM.;1 will need to be created as mentioned above.
479
480    In similar fashion, synchronized access to the scoreboard file RECORD
481    is accomplished using temporary entry RECORD.LOCK and LOGFILE using
482    entry LOGFILE.LOCK.
483
48415. Unless you have both Motif and the Athena Widget set from MIT, you
485    will not be able to use the X11 interface on VMS.  Even if you do
486    have both those things, such a configuration has not been tested and
487    there are no provisions for it in vmsbuild.com.  Makefile.src does
488    have the extra source files listed, but not the necessary libraries.
489
490    The X11 port will not compile and link with DECwindows, but it will
491    be able to display on a VMS DECwindows X server provided that it and
492    its Unix X client have a compatible transport between them (either
493    TCP/IP added to VMS or DECnet added to Unix) and session security
494    is set up appropriately.  You'll need to add the contents of file
495    [.win.X11]NetHack.ad into your DECW$USER_DEFAULTS:DECW$XDEFAULTS.DAT,
496    and modify some of the lines.  The DECwindows window manager does not
497    support having input focus automatically follow the pointer, so you
498    should uncomment the "NetHack*autofocus" resource line.  (For Motif
499    this may not be necessary, depending on customization options.)
500    Uncommenting the "NetHack*slow" line is highly recommended.  You'll
501    also need to set "NetHack*fonts: fixed" (rather than "variable"), and
502    either set the map font to "fixed" too or install the "nh10" font
503    that comes in file [.win.X11]nh10.bdf.  If NetHack warns that the map
504    font is variable, then something isn't set up properly.
505
506    After creating or modifying decw$xdefaults.dat, you must restart the
507    window manager in order for any changes to take effect; it's easiest
508    to just make the session manager quit and then log in again.
509
51016. If necessary, send problem reports via e-mail to
511       <devteam@nethack.org>
512    Always include version information for NetHack, the operating system,
513    and the C compiler used.
514
51520-OCT-2003
516minimally updated 9-NOV-2015...
517and again 5-MAY-2019...
518and yet again 26-JAN-2020...
519
520# NetHack 3.6  Install.vms       $NHDT-Date: 1575245132 2019/12/02 00:05:32 $  $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.16 $
521# Copyright (c) 2003 by Robert Patrick Rankin
522# NetHack may be freely redistributed.  See license for details.
523