1 Instructions for Building and Installing NetHack 3.7.0 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.7 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 [.lib .lua535] -- Lua distribution from https://www.lua.org/ 23 [.src] -- primary source files 24 [.sys] -- parent for [.sys.*] 25 [.sys .share] -- files shared by several ports, including VMS 26 [.sys .vms] -- VMS-specific source and support files 27 [.util] -- sources for essential utility programs 28 [.win] -- parent for [.win.*] 29 [.win .tty] -- "window" routines for ordinary terminals 30 (including terminal windows on workstations) 31 The following subdirectories may be present, but are not useful for 32 building NetHack on VMS and are not required: 33 [.sys .amiga] -- AmigaDOS 34 [.sys .atari] -- Atari TOS 35 [.sys .be] -- BeBox BeOS 36 [.sys .mac] -- Macintosh 37 [.sys .msdos] -- MSDOS for IBM PCs and compatibles 38 [.sys .os2] -- OS/2 39 [.sys .share .sounds] -- AIFF format audio files 40 [.sys .unix] -- guess :-) 41 [.sys .unix .hints] -- configuration data for setup.sh 42 [.sys .wince] -- Windows CE 43 [.sys .wince .ceinc] -- more WinCE 44 [.sys .wince .ceinc .sys] -- ditto 45 [.sys .winnt] -- Windows NT 46 [.win .curses] - window routines for curses interface 47 [.win .gem] -- window routines for Atari/GEM 48 [.win .gnome] -- window routines for Unix/GNOME 49 [.win .Qt] -- window routines for Qt 50 [.win .share] -- "tile" graphic support 51 [.win .win32] -- Windows NT and Windows CE 52 [.win .X11] -- window routines for X-Windows; requires X11R4 53 or later and MIT's Athena Widget set 54 You must arrange things in this structure or the supplied procedures 55 and instructions in this file will not work properly. Several DCL 56 command files are present in the [.sys.vms] subdirectory and will not 57 work as intended if they are moved elsewhere. The file called Files 58 in the top directory contains lists of everything that should be in 59 each subdirectory, including things that are constructed as NetHack 60 is being built. 61 623. Prior to beginning compilation, go to the [.include] subdirectory and 63 edit vmsconf.h according to its comments. You should set Local_WIZARD 64 and Local_HACKDIR to appropriate values, and you might want to define 65 TEXTCOLOR if you have any color VAXstations or color terminals which 66 handle ANSI-format escape sequences to set foreground and background 67 color for text characters. (VT241/VT340 color graphics won't work.) 68 Other things which may be of interest are SECURE if you intend to 69 set up NetHack as an installed image which is granted privileges, and 70 SHELL which should be disabled if you intend to allow captive accounts 71 to run NetHack. You may also want to edit file config.h, but that's 72 only necessary if you want or need to disable some of the game options. 73 The distributed copy of config.h will work successfully on VMS; 74 vmsconf.h has conditional code to deal with the UNIX-specific items. 75 764. vmsbuild.com checks for several source files in [.util] and if it doesn't 77 find them, it uses [.sys.vms]spec_lev.com to generate them. If you have 78 the programming utilities lex or flex and yacc or bison, they be will 79 used if symbols are set up to run them. Or if you have them but do not 80 have symbols set up, you may edit spec_lev.com to have it run them. 81 If neither of those situations applies, spec_lev.com will default to 82 copying pre-genearated versions of the appropriate files (dgn_lex.c, 83 lev_lex.c, dgn_yacc.c, lev_yacc.c, dgn_comp.h, and lev_comp.h) from 84 [.sys.share] into [.util]*.c and [.include]*.h. 85 86 Once the file lev_yacc.c is in place, vmsbuild.com won't execute 87 spec_lev.com to make any of them, so if you decide to modify *_comp.l 88 and/or *_comp.y then you'll either need to execute spec_lev.com before 89 vmsbuild.com or remove [.util]lev_yacc.c so vmsbuild.com will do so. 90 91 If you use the versions of the lex and yacc utilities from the OpenVMS 92 freeware CD, you will need to pass "/Define=_DECC_V4_SOURCE" as the 93 third argument to vmsbuild.com in step #5. The version of yacc 94 or bison in that distribution places '#include <stdlib.h>' in the 95 generated code, before NetHack's '#include "config.h"', leading to 96 conflicts that prevent compilation from completing. 97 985. To build NETHACK.EXE and its auxiliary programs, execute the 99 following DCL command: 100 $ @[.SYS.VMS]VMSBUILD !defaults to CC, either VAXC or DECC 101 or $ @[.SYS.VMS]VMSBUILD "GNUC" !force "GCC" 102 It can take quite a bit of time for a full build to complete. Around 103 an hour on a Alphastation 200 and 5 minutes on a modern IA64 system. 104 vmsbuild.com will display some feedback as it executes; generally 105 this will be the name of each source file that's about to be compiled 106 or the name of the executable that has just been linked. 107 1086. If you have already started (or finished) a build and decide to start 109 over with a different compiler, you should DELETE [.SRC]CRTL.OPT;* 110 first. 111 1127. After compilation, it's time to perform installation. Go back to 113 the top directory. Either edit [.sys.vms]install.com to indicate 114 where you want everything to be installed, or specify the location 115 and "playground" owner on the command line. Then execute either 116 $ @[.SYS.VMS]INSTALL 117 or $ @[.SYS.VMS]INSTALL location owner 118 where location is a device:[directory] specification and owner is 119 either a rights identifier or UIC. If install.com is not modified 120 and if values aren't supplied on the command line, the default values 121 used are the translation of logical name HACKDIR, if any, or else 122 [.PLAY] (relative to the current directory), and the UIC for the 123 current process. install.com will use the auxiliary programs 124 constructed by vmsbuild.com to process quite a few data files in the 125 [.dat] subdirectory. Then it will create the playground directory, 126 if necessary, plus the associated [.save] subdirectory. Next it will 127 copy the data files into the playground; this step can take a while. 128 Finally it will copy nethack.exe and a few additional support files. 129 130 After it completes, the files [.src]nethack.olb, [.src]nethack.exe, 131 [.util]*.obj, [.util]*_comp.exe, and [.util]makedefs.exe can be 132 deleted in order to save disk space if desired. The other program, 133 [.util]recover.exe, should not be deleted unless you make a copy of 134 it somewhere--perhaps in the playground directory--first. It can be 135 used to resurrect some games disrupted by system or program crash. 136 1378. The file nethack.com which is copied to the playground directory can 138 be used to invoke NetHack, or nethack.exe can be run directly. Most 139 of the command-line options specified in the Unix man-page (file 140 [.doc]nethack.txt) are also applicable to VMS. Some comments at the 141 beginning of nethack.com illustrate several of the options. New 142 players should read the file "Guidebook.txt" which will be copied 143 into the playground directory as "Guidebook.doc". 144 145 146Notes: 147 1480. Version 3.5.x was never publicly released. 149 1501. Save files and bones files from 3.6.x and earlier versions will not 151 work with 3.7.0. The scoreboard file (RECORD) from 3.6.x or 3.4.x or 152 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.7 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