--- /dev/null
+ SCCS Id: @(#)Install.dos 3.3 2000/08/02
+
+ Copyright (c) NetHack PC Development Team 1990-2000.
+ NetHack may be freely redistributed. See license for details.
+ ==============================================================
+ Instructions for compiling and installing
+ NetHack 3.3 on a DOS system
+ ======================================================
+ (or, How to make PC NetHack 3.3)
+ Last revision: August 2, 2000
+
+Credit for a runnable full PC NetHack 3.3 goes to the PC Development team
+of Paul Winner, Kevin Smolkowski, Michael Allison, Yitzhak Sapir, Bill Dyer,
+Timo Hakulinen, Yamamoto Keizo, Mike Threepoint, Mike Stephenson,
+Stephen White, Ken Washikita and Janet Walz. The present port is based
+on the previous effort of Pierre Martineau, Stephen Spackman, Steve Creps, Mike
+Threepoint, Mike Stephenson, Norm Meluch and Don Kneller.
+
+CONTENTS:
+
+ I. Dispelling the Myths
+ II. Compiling on a DOS machine
+ Appendix A - Building the "official binaries"
+ Appendix B - Building other binaries
+ Appendix C - Microsoft C Compiler notes
+ Appendix D - DJGPP Compiler (gcc ported to msdos) notes
+ Appendix E - Borland C++ Compiler notes
+ Appendix F - Microsoft C Compiler Warnings
+ Appendix G - Additional Notes
+ Appendix H - Contacting Us
+
+I. Dispelling the Myths:
+
+ Compiling NetHack is not as easy as it sounds, nor as hard as it looks,
+ however it will behoove you to read this entire file through before
+ beginning the task.
+
+ We have provided the proper makefiles for building NetHack using the
+ following compilers:
+ Microsoft C 7.0 and Microsoft Visual C++ Professional (MSVC) 1.52c
+ djgpp V2.0 or later
+ Borland C V3.1
+
+ For specific details concerning each compiler, please see the
+ corresponding appendix.
+
+ The makefile named Makefile.MSC is for use with Microsoft's NMAKE,
+ the make utility that ships with the Microsoft C Compiler version 7.0
+ and above, including the 16-bit Microsoft Visual C++ Professional.
+
+ The makefile named Makefile.GCC is for use with GNU Make that
+ accompanies djgpp.
+
+ The makefile named Makefile.BC is for use with Borland's make that
+ accompanies Borland C 3.1. Other versions of Borland's make may or
+ may not work, but version 3.7 (of MAKE) is known to not work.
+
+ If you want to build a copy of NetHack that is identical to the
+ "official binaries", please see appendix A.
+
+ You may find it useful to obtain copies of lex (flex) and yacc (bison
+ or byacc). While not strictly necessary to compile nethack, they are
+ required should you desire to make any changes to the level and dungeon
+ compilers. Flex and Bison are included with the DJGPP distribution and
+ are also available on many archive sites.
+
+II. To compile your copy of NetHack on a DOS machine:
+ (or "just follow these few 'simple' steps outlined below.")
+
+1. It almost goes without saying that you should make sure that your tools
+ are set up and running correctly.
+
+2. Make sure all the NetHack files are in the appropriate directory
+ structure. You should have a main directory with subdirectories
+ dat, doc, include, src, sys\share, sys\msdos, util, win\tty and
+ win\share. Other subdirectories may also be included in your
+ distribution, but they are not necessary for use with DOS. You can
+ delete them to save space. If you are using MSC7 or MSVC, the makefile
+ will create an additional working directory src\o.
+
+ Required Source Directories for DOS NetHack:
+
+ (top)
+ |
+ -------------------------------------------------
+ | | | | | | |
+ util dat doc include src sys win
+ | |
+ ------ -----
+ | | | |
+ share msdos tty share
+
+ Check the file "Files" in your top level directory for an exact
+ listing of what files are in which directory. In order for the
+ Makefiles to work, all the source files must be in the proper
+ locations.
+
+ If you downloaded or ftp'd the sources from a UNIX system, the lines
+ will probably end in UNIX-style newlines, instead of the carriage
+ return and line feed pairs used by DOS. Some programs have trouble
+ with them, so you may need to convert them (with a utility like
+ Rahul Dhesi's "flip").
+
+3. A few files in the NetHack distribution are uuencoded because
+ they contain non-ascii characters, or binary information. To use
+ them they must first be decoded using a uudecode utility (available
+ from your local archive site). After reading the descriptions
+ of these files below, uudecode the ones that you will need in order
+ to build NetHack with the options that you have decided you want.
+
+ The uuencoded files that are relevant to NetHack on a DOS machine
+ include:
+
+ nhico.uu Optional. This uudecodes into a MS-Windows compatible
+ ICON. You only need to uudecode this if you plan on
+ launching NetHack from MS-Windows, and want a unique
+ Nethack ICON to use.
+
+ nhpif.uu Optional. This uudecodes into a MS-Windows compatible
+ PIF file which may be used to launch NetHack from the
+ MS-Windows program manager. You only need to uudecode
+ this if you plan on launching NetHack from within
+ MS-Windows.
+
+ termcap.uu Optional. Termcap support is no longer required for
+ building NetHack, though you can if you want to.
+ The file termcap.uu is the fixed version
+ of the Fred Fish termcap library. If you have modified
+ pcconf.h to define TERMLIB as well as commented out
+ the default #define NO_TERMS, then you will need to
+ run a uudecode utility on termcap.uu to generate the
+ file termcap.zip. termcap.zip contains several files
+ of termcap routines. Using them with NetHack involves
+ very little knowledge of the UNIX concept of a termcap
+ database; mostly you need to know enough to set a TERM
+ environment variable. You can unzip termcap.zip in the
+ sys/share directory, but if you are going to use it, it
+ is probably better to unzip a copy in a special directory
+ and copy the library files to where your linker can find
+ them. NetHack versions since 3.1.2 no longer enable
+ the use of termcap in the default configuration, or
+ with the official binaries.
+
+ Makefiles are included should you want to build your own
+ termcap library file. Makemsc.lib works with Microsoft
+ C (MSC and MSVC) and generates termcap.lib, Makegcc.lib
+ works with DJGPP and generates libtermc.a.
+
+4. Go to the sys/msdos directory and ensure that the file setup.bat
+ has MSDOS style end-of-line characters rather than UNIX style
+ end-of-line characters. You can do that using a utility like
+ Rahul Dhesi's "flip", or by invoking the MSDOS edit utility on
+ setup.bat and saving the file without making any changes. Failure to
+ do this will prevent the bat file from executing completely, yet no
+ warning message will be given.
+
+ Run the setup.bat batch file with one of the following as the argument:
+
+ MSC For Microsoft C and its NMAKE.
+
+ GCC For djgpp and GNU MAKE.
+
+ BC For Borland C++ 3.1, and Borland's MAKE.
+
+ The appropriate and necessary Makefile movements will be accomplished
+ for you, as well as verifying a few files and fixing a few file names
+ on FAT systems with long file name support.
+
+5. Now go to the include subdirectory to check a couple of the header
+ files there. Things *should* work as they are, but since you have
+ probably set up your system in some sort of custom configuration
+ it doesn't hurt to check out the following:
+
+ First check config.h according to the comments to match your system and
+ desired set of features. Mostly you need to check the WIZARD option,
+ and check TERMLIB and COMPRESS. Also be sure to leave DLB support
+ commented out in config.h. MSDOS has support for DLB, but it must be
+ done through the Makefile, rather than config.h, to ensure that the
+ necessary packaging steps are done.
+
+ We've managed to enable all the special features. You may include all
+ or as few of them as you wish. To conserve disk space, you may wish
+ to disable LOGFILE and NEWS.
+
+ Also check pcconf.h, which should not need much editing (if you are
+ including random.c, and if you do not require termcap for screen
+ management). If you are not including random.c you will need to
+ comment out RANDOM.
+
+ There are several options available for screen management with this
+ release of PC NetHack. The features #define TERMLIB, #define
+ ANSI_DEFAULT, and #define NO_TERMS in pcconf.h control the various
+ options.
+
+ The NO_TERMS feature (the default) has the advantage of not needing a
+ DEVICE=ANSI.SYS statement in config.sys. The supplied sources and
+ header files are distributed with support for NO_TERMS enabled.
+ NO_TERMS will not work with TERMLIB, nor with ANSI_DEFAULT defined.
+ The NO_TERMS feature uses internal routines for screen management, and
+ may be an ideal choice if your play machine is industry standard (has
+ an IBM compatible BIOS).
+
+ Should you choose to leave NO_TERMS defined, define only one of the two
+ screen access methods. If compiling for Microsoft compilers, use
+ SCREEN_BIOS; if using DJGPP, you can choose between SCREEN_BIOS
+ and SCREEN_DJGPPFAST. Never, never, ever choose both. Bad things
+ will happen. We are not kidding.
+
+ If you leave the #define TERMLIB commented in pcconf.h to disable use
+ of termcap routines, then your screen management must rely on either
+ the NO_TERMS feature described above, or the ANSI_DEFAULT feature.
+ Either of these will make your job a bit easier than if you choose to
+ use TERMLIB. If you elect to include TERMLIB support, you may compile
+ with both TERMLIB and ANSI_DEFAULT, and simply not set your TERM variable
+ if you do not wish to use the termcap file settings. You will need
+ to uudecode the termcap library in sys\share if you are using the TERMLIB
+ feature.
+
+6. If you want to change the high score list behavior, examine the top of
+ topten.c, in the src directory. You may want to change the definitions of
+ PERSMAX, POINTSMIN, and ENTRYMAX. We set POINTSMIN to 51 and ENTRYMAX to
+ 50 to keep the size of the score list down.
+
+7. Go to the src directory and edit the top of your Makefile. Be sure the
+ directory you want the game installed in (GAMEDIR) actually exists.
+
+ If you elected to use termcap (TERMLIB defined), then uncomment the
+ TERMLIB macro in your Makefile that points to the location of the
+ library.
+
+ That is, TERMLIB =
+ should be TERMLIB = (SSYS)\termlib.lib
+
+ If you are recompiling after patching your sources, or if you got your
+ files from somewhere other than the official distribution, "touch
+ makedefs.c" to ensure that certain files (onames.h and pm.h) are remade,
+ lest potentially troublesome timestamps fool your make utility.
+
+ a) For Borland C++ 3.1,
+
+ Choose an overlay schema by setting SCHEMA to 1 or 2. If you change
+ the overlay schema, you will need to recompile all the object modules
+ from scratch since the overlay schema is information is used during
+ compile time for Borland C++, unlike Microsoft C which does it during
+ link time.
+
+ b) For Microsoft C 7.0 or greater, and Microsoft Visual C++
+
+ The only overlay schema available is Schema3 so you don't have to
+ choose one. The Makefile is set up for it already. The overlay
+ description file src\Schema3.def is created from sys\msdos\Schema3.MSC
+ by setup.bat.
+
+ If you elected to add graphical tile support, set TILESUPPORT to Y.
+
+ Set USE_DLB to Y if you wish to place NetHack's many runtime files into
+ a special archive that NetHack can utilize. This is highly recommended!
+ In fact, we haven't tested NetHack without it for several releases now.
+
+8. Now that everything is set up, what you do next depends on which
+ compiler and version you are using. You will need to execute either
+ step 8a, or step 8b, or step 8c, but only one of them.
+
+ a) For Microsoft C 7.0 or greater, and Microsoft Visual C++
+
+ Go to the src directory, and "nmake install".
+
+ b) For djgpp
+
+ Go to the src directory, and using the GNU Make utility,
+ "make install".
+
+ c) For Borland C V3.1
+
+ Go to the src directory, and using the Borland Make utility,
+ "make -N install".
+
+
+ Depending on your particular machine and compiler, you can either
+ grab a cup of coffee or go home for the day. Your computer will be
+ occupied for quite some time. If all goes well, you will get an
+ NetHack executable.
+
+9. If you chose DLB support (recommended), make sure that the file nhdat
+ got copied into the game directory.
+
+ If you didn't choose DLB support, make sure the support files --
+ data, rumors, cmdhelp, opthelp, help, hh,history, guidebook.txt
+ license, and all the *.lev files -- were copied to the game directory.
+ If not, move them there from the dat directory yourself. rumors can
+ be created manually be entering "makedefs -r", data by entering
+ "makedefs -d".
+
+ Make sure the files NetHack1.tib and NetHacko.tib made it to your game
+ directory. Copy them from src to the game directory yourself if
+ necessary.
+
+ Make sure the files defaults.nh and termcap made it to your game
+ directory. If not, go to sys\share and copy NetHack.cnf to
+ your game directory as defaults.nh. The name in previous versions was
+ nethack.cnf, but the CNF extension conflicted with the MS Windows
+ speed-dialer, making the file hidden on many machines.
+
+ If you changed your build settings to include TERMCAP support, copy
+ termcap to your game directory.
+
+ Also, make sure the file msdoshlp.txt made it to your game directory.
+ If it didn't, move it from sys\msdos to your game directory
+ yourself.
+
+10. In your game directory, review the settings in defaults.nh and adjust
+ them according to your style of play. Some new options that you might
+ be interested in are "menustyle" (for tailoring new object selection
+ interface), and "video" (for turning on graphical tiles).
+
+ On Borland C++, the soundcard:autodetect option enables pc speaker
+ sound in NetHack if you compiled with PCMUSIC set in pcconf.h. It
+ is rumored that this also works with djgpp, but the PCMUSIC setting
+ in pcconf.h must be uncommented manually.
+
+11. Play NetHack. If it works, you're done!
+
+Appendix A - Building the "official binaries"
+
+ If you wish to build a copy of NetHack identical to the ones that
+ the pc team distributes, simply do the following:
+
+1. 16-bit Real Mode Overlaid version
+ Use the 16-bit Microsoft Visual C++ V1.52c compiler
+
+ Paths below are relative to the top of your unpacked
+ NetHack source distribution:
+
+ md \games\nethack
+ cd sys\msdos
+ setup MSC
+ cd ..\..\src
+ nmake install
+
+2. 32-bit Protected Mode DPMI version
+ Use the 32-bit djgpp compiler V2.03 or greater
+
+ Paths below are relative to the top of your unpacked
+ NetHack source distribution:
+
+ md \games\nethackd
+ cd sys\msdos
+ setup GCC
+ cd ..\..\src
+ make install
+
+
+Appendix B - Building other binaries
+
+ Make sure that USE_DLB and TILESUPPORT (if using Microsoft C or Borland
+ C) are both set to be turned on in the appropriate makefile.
+
+ For an overlaid binary built with Microsoft C 7.00, make no changes to
+ any of the defines and use the Makefile.MSC as distributed.
+
+ For an overlaid binary built with Borland C++ 3.1, make no changes to
+ any of the defines and use the makefile Makefile.BC as distributed.
+
+ For the 32-bit binary built with DJGPP (playable on a 386 or
+ better machine only), make no changes to any of the defines and use
+ the Makefile.GCC as distributed.
+
+ Make sure the following files have been converted from the
+ unix style "^J" end of line, to the msdos style "^M^J":
+ license, help, hh, termcap, history, cmdhelp wizhelp and
+ defaults.nh.
+
+ Uudecode nhico.uu nhpif.uu.
+
+ Place all the files in a clean directory and test.
+
+Appendix C - Microsoft C Compilers
+
+ Officially, support is no longer provided for MSC versions prior to
+ 7.0. For versions of MSC 7.0 and greater (including Visual C++ ),
+ a single Makefile is used, and it is MS NMAKE specific. It is executed
+ from the src directory. It makes several passes over the files in order
+ to produce overlays.
+
+ MSC Version 7.0 works with or without the August 1992 patch.
+
+ MSVC Professional 1.52c works as distributed. In some rare cases
+ you may encounter a problem with the compiler where it stops
+ part way through the build with a memory error. Things proceed
+ normally after starting 'nmake install' once again. The problem,
+ although annoying if it happens, does not affect the code generation
+ or the final executable.
+
+ MSC Version 7.0 and MSVC take advantage of the CL environment variables
+ to set the compiler flags, as they exceed the MSDOS limitation of 128
+ characters on the command line. Please read the Makefile carefully
+ and select those options that go with the compiler. The Makefile
+ will set the CL environment variable within the context of the build,
+ so you do not have to do it elsewhere.
+
+
+ Microsoft C version 7.0 and
+ Microsoft Visual C++ Professional versions up to 1.52c.
+
+ Microsoft's MOVE overlay facility is suitable for building overlaid
+ versions of NetHack.
+
+ A single Makefile is used, and it is NMAKE specific. It is executed
+ from the src directory. It is stored in the distribution as
+ sys/msdos/Makefile.MSC. It is moved to the src directory (with the
+ new name 'Makefile') by setup.bat when invoked like so: "setup MSC".
+
+ The Microsoft Visual C++ Professional compiler utilizes the same
+ Makefiles and instructions for compiling as Microsoft C version 7.0.
+
+Appendix D - DJGPP Compiler (gcc ported to msdos)
+
+ If you have a 386 or better machine, you are in luck. You can compile
+ NetHack without spending money on a compiler. DJGPP is available free
+ from many archive sites.
+ At the time of this release in August 2000, the URL
+ http://www.delorie.com/djgpp/zip-picker.html/
+ had information on how to obtain djgpp and what pieces to get.
+
+ Setting up DJGPP is more than adequately explained in the documentation
+ that comes with it. Be sure to pick up the yacc and flex built with
+ DJGPP if you intend to do any modification of the special levels or
+ dungeon compilers. They should be available at the same place you got
+ djgpp.
+
+ The latest version of djgpp, V2.03 will produce a binary that will run
+ under Microsoft Windows, or any other DPMI provider. djgpp also comes
+ with a DPMI provider called CWSDPMI. Place CWSDPMI.EXE in your path
+ and it will be used in the absence of any other DPMI provider.
+
+ If you want to use the built-in DJGPP screen routines, uncomment
+ SCREEN_DJGPPFAST in pcconf.h (the default for djgpp).
+ Note that some of these routines are broken under early versions
+ of the compiler, so we pick and choose the ones that work.
+ See video.c for details.
+
+Appendix E - Borland C++ Compiler
+
+ Officially, support is not provided for any version of Borland C++ or
+ Turbo C++ other than Borland C++ 3.1. It does not work with Borland
+ C++ 4.5 yet, and versions 4.0 and 5.0 have not been tested. We believe
+ that compiling with the version of Turbo C++ equivalent to Borland C++
+ 3.1 should work. For Borland C++ 3.1, a single Makefile is used, and it
+ is specific to Borland's MAKE version 3.6. It is executed from the src
+ directory and makes several passes over the files in order to produce
+ overlays.
+
+ Borland C++ 3.1
+
+ Borland's VROOMM overlay facility is suitable for building overlaid
+ versions of NetHack.
+
+ A single Makefile is used, and it is MAKE 3.6 specific. It is executed
+ from the src directory. It is stored in the distribution as
+ sys/msdos/Makefile.BC. It is moved to the src directory (with the
+ new name 'Makefile') by setup.bat.
+
+ Remember to type 'make -N install' rather than just 'make install'. The
+ -N option is required.
+
+ Make sure to set the directories BCTOP and related directories in
+ Makefile. to the correct directory. There are problems in running the
+ newest versions of flex and bison from the all-purpose Makefile so you
+ should leave DO_YACC and DO_LEX as is.
+
+ Turbo C++
+
+ As explained, this has not been tested. However, if you want to test if
+ Turbo C++ works, provided that the copy of Borland's MAKE you have is
+ version 3.6 (you can check this by running MAKE in an empty directory),
+ you are welcome to try. If Turbo C++ does not define __BORLANDC__,
+ just put the line:
+ #define __BORLANDC__ __TURBOC__
+ at the very very top of hack.h. If it works, be sure to tell us.
+
+Appendix F - Microsoft C Compiler Warnings
+
+ If you are using MSC for your compile with any of the /W levels set,
+ you can expect warnings. The list below are those warnings that we
+ are aware of and our recommendation for dealing with them. You can
+ use the warning disable pragma to ignore them if you wish. (NOTE:
+ this is not a complete list of all warnings you might receive, only
+ those for which we feel we can safely provide guidance on.)
+
+C4131 (function:uses old-style declarator)
+ You should ignore this warning. In order to make the source code as
+ portable as possible, only old-style declarators are used so that as
+ many compilers as possible can use the same code.
+C4706 (Assignment within conditional expression)
+ This is a perfectly valid construction. These warnings have not
+ produced any problems.
+C4761 (Integral size mismatch in argument; conversion supplied)
+ These should be no problem. Prototyping compilers will do the con-
+ version, and non-prototyping compilers will go through int anyway.
+
+Appendix G - Additional Notes
+
+1) Save files and bones files from previous versions of NetHack will not
+ work with this NetHack. Don't bother trying to keep them. Record
+ (score) files from before 3.0 patchlevel 7 will almost work, but you need
+ to make one change manually to them: At the end of each line is a word or
+ phrase specifying what killed the player. Change the string to start with
+ the words "killed by", "killed by a", or "killed by an" (whichever is
+ appropriate). If the death was petrification, it should read "petrified
+ by" instead of "killed by". Don't change "starvation", "quit", "escaped",
+ or "ascended".
+
+2) To install an update of NetHack after changing something, type 'nmake'
+ for Microsoft C, 'make -N' for Borland C++, and 'make' for DJGPP
+ from the src directory. If you add, delete, or reorder monsters or
+ objects, or you change the format of saved level files, delete any save
+ and bones files. (Trying to use such files sometimes produces amusing
+ confusions on the game's part, but usually crashes.)
+
+ If you made changes to any of the level compiler software, you may have
+ to delete dgn_flex.c, dgn_yacc.c, lev_flex.c, and lev_yacc.c from the
+ util directory to ensure that they are remade. This is not officially
+ supported for Borland C++.
+
+3) During linking the Microsoft Overlay Linker will need temporary storage
+ space. Make sure you have about a meg of free disk wherever you have
+ defined your temporary storage.
+
+Appendix H - Contacting the Development Team
+
+ If you discover a bug and wish to report it please send mail to:
+ nethack-bugs@nethack.org
+
+ If you have comments or suggestions, feel free to drop us a line c/o
+ DevTeam@nethack.org
+
+