home *** CD-ROM | disk | FTP | other *** search
- Instructions for compiling and installing NetHack 3.1
- on an OS/2 system
- =====================================================
- Timo Hakulinen
- Last revision: 24 Jan 1993
-
- 0. Read this entire file before starting, and come back to the Notes below if
- you have any problems.
-
- 1. Make sure all the NetHack files are in the appropriate directory
- structure. You should have a top directory (e.g. nh31, or whatever you
- like) with subdirectories dat, doc, include, src, util, sys\share,
- sys\os2, and win\tty. You may have other subdirectories under sys and
- win, but they will not affect compilation for an OS/2 system. If you do
- not follow this structure, the makefile will not function properly. The
- .c files for the main program belong in src, those for utility programs in
- util, and OS/2-specific ones in sys\os2. All the .h files belong in
- include, the documentation in doc, and assorted data files in dat. There
- are also some necessary files in sys\share (pc*.c, random.c, dgn_*.*,
- lev_*.*). A more detailed explanation of the directory structure is found
- in file Files, which should be in the top directory.
-
- If you downloaded or ftp'd the sources from a UNIX system, the lines may
- end in UNIX-style newlines, instead of the carriage return and line feed
- pairs used by DOS and OS/2. You'll have to convert them (with a utility
- like Rahul Dhesi's "flip"). Also, every file should end with a carriage
- return / line feed pair, because Microsoft C has had a habit of ignoring
- the last line of each file otherwise. Besides, even editing UNIX-style
- files with DOS editors is often a royal pain.
-
- 2. The makefile for OS/2, Makefile.os2, is found in directory sys\os2. Copy
- it to directory src and rename it Makefile. From now on, Makefile.os2
- will be referred to as "Makefile" in this document.
-
- The Makefile supports the following make utilities:
-
- NDMAKE a public domain make utility for DOS by Don Kneller
- NMAKE make shipped with Microsoft languages and IBM C Set/2
- DMAKE a public domain make for DOS and OS/2 by Dennis Vadura
-
- Both NDMAKE and DMAKE are available at major archive sites. The
- following compilers are supported:
-
- compiler: runs in: compiles for:
-
- Microsoft C 5.1 DOS / OS/2 1.0-2.x OS/2 1.x
- Microsoft 6.0A (see note 5) - " - - " -
- IBM C Set/2 1.00, Toolkit/2 2.00 OS/2 2.x OS/2 2.x
- GCC emx 0.8f (see note 6) OS/2 2.x OS/2 2.x
-
- Note that code compiled for OS/2 versions 1.0-1.3 runs unmodified in OS/2
- versions 2.0 and up. It should in principle be possible to cross compile
- NetHack 3.1 for OS/2 in DOS using NDMAKE and MSC, but this is not
- recommended (see note 3).
-
- If you're using some other compiler than one listed above, you will have
- to adapt Makefile to your needs. In particular, change the CC, CFLAGS,
- LINK, and LFLAGS macros to your C compiler's and linker's liking. See
- Makefile for more information.
-
- If you are going to be constructing the Fred Fish termlib library you will
- need Makefile.lib in sys\share (see note 4).
-
- 3. Go to the include subdirectory. First edit config.h according to the
- comments to match your system and desired set of features. In particular,
- make sure that OS2 is defined, and that UNIX, HACKDIR, and COMPRESS are
- *not* defined. If your compiler is ANSI compliant (like practically all
- OS/2 compilers are), it's probable that nothing else needs to be
- configured in config.h. However, if you have VISION_TABLES defined and
- get a compilation error while processing vis_tab.c, you may have to
- uncomment BRACES too.
-
- Next look at os2conf.h. This file shouldn't need much changing. If you
- want to use the hardcoded OS/2 system definitions in def_os2.h instead of
- the compiler's standard headers, comment out OS2_USESYSHEADERS. This may
- become necessary if you are using a compiler which doesn't come with
- proper system headers by default. In this case you may have to edit the
- definitions there, because every compiler has its own way of declaring
- the necessary system functions and data structures. In general you
- should prefer the compiler's offerings, if possible.
-
- If you are using a 32 bit compiler other than GCC emx 0.8f or C Set/2 in
- OS/2 2.x, force OS2_32BITAPI to be defined. Otherwise it is defined only
- for the above mentioned compilers.
-
- If you are not going to include random.c, because you are using the
- random number generator provided by your compiler, you will need to
- comment out RANDOM.
-
- If you want to muck with different termcap settings, uncomment TERMLIB to
- enable use of termcap routines (see note 4). This is not necessary to
- create a fully functional game, however.
-
- 4. If you are using another compiler than MSC, GCC, or IBM C Set/2, you may
- want to look through system.h in the include directory. This file matches
- the return and parameter types for system calls and library routines with
- various flavors of compilers and operating systems. Leaving this file
- alone is unlikely to cause problems, but if you get compile errors with
- any functions in the standard library, it's worth checking the
- declarations there.
-
- 5. 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.
-
- 6. Go to the src directory and edit the top of Makefile. Be sure the
- directory you want the game installed in actually exists.
-
- You'll need nroff and/or TeX to do the files in doc. If you don't have
- either of these, you can skip it.
-
- If you elected not to use the high-quality BSD random number routines by
- commenting out RANDOM in os2conf.h, comment out (or set equal to nothing)
- the RANDOM macro in Makefile.
-
- If you elected to use Fred Fish's termcap library (bundled in as
- termcap.uu in directory sys\share), you will have to generate termlib.lib
- from those sources by typing "make -f makefile.lib termlib.lib". You must
- set the TERMLIB option in Makefile to link in the resulting 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 make.
-
- If you have lex and yacc programs, or the equivalent flex and bison
- programs, you can set up Makefile to generate the appropriate .h and .c
- files from their .l and .y counterparts whenever you recompile. This is
- done by changing the do_yacc and do_lex targets in Makefile to depend on
- targets yacc_act and lex_act instead of yacc_cpy and lex_cpy. Otherwise
- Makefile will copy pre-generated yacc and lex output files dgn_*.* and
- lev_*.* from directory sys\share to util and include.
-
- Now, enter "make all", and take a siesta; your computer will be occupied
- for a fair amount of time. If all goes well, you will get an executable.
-
- 7. All the support data files should have been copied to the game directory
- by the make process. Here is the complete list in alphabetical order of
- all the files that should have gotten there during a full build:
-
- A-filla.lev A-fillb.lev A-goal.lev A-locate.lev A-start.lev
- B-filla.lev B-fillb.lev B-goal.lev B-locate.lev B-start.lev
- C-filla.lev C-fillb.lev C-goal.lev C-locate.lev C-start.lev
- E-filla.lev E-fillb.lev E-goal.lev E-locate.lev E-start.lev
- H-filla.lev H-fillb.lev H-goal.lev H-locate.lev H-start.lev
- K-filla.lev K-fillb.lev K-goal.lev K-locate.lev K-start.lev
- P-filla.lev P-fillb.lev P-goal.lev P-locate.lev P-start.lev
- R-filla.lev R-fillb.lev R-goal.lev R-locate.lev R-start.lev
- S-filla.lev S-fillb.lev S-goal.lev S-locate.lev S-start.lev
- T-filla.lev T-fillb.lev T-goal.lev T-locate.lev T-start.lev
- V-filla.lev V-fillb.lev V-goal.lev V-locate.lev V-start.lev
- W-filla.lev W-fillb.lev W-goal.lev W-locate.lev W-start.lev
- air.lev asmodeus.lev astral.lev baalz.lev bigroom.lev
- castle.lev cmdhelp data dungeon earth.lev
- fakewiz1.lev fakewiz2.lev fire.lev help hh
- history juiblex.lev knox.lev license medusa-1.lev
- medusa-2.lev mine_end.lev minefill.lev minetown.lev nethack.cmd
- nethack.cnf nethack.exe nethack.ico opthelp options
- oracle.lev oracles orcus.lev quest.dat recover.exe
- rumors sanctum.lev tower1.lev tower2.lev tower3.lev
- valley.lev water.lev wizard1.lev wizard2.lev wizard3.lev
- wizhelp
-
- Yes. It's 106 files for a full featured NetHack 3.1. If any of the files
- are missing, try to rerun make. If that doesn't help, you'll have to try
- to decipher Makefile to find out how to manually create the missing
- files. These kinds of troubles shouldn't happen except for two reasons:
- You've run out of disk space while compiling or your make utility doesn't
- understand Makefile properly for some reason. In either case, you should
- get some warnings from the make, though.
-
- If you have old record, logfile, or news files in the game directory, they
- are not overwritten. Of course, old records from NetHack 3.0 are not
- worth keeping with 3.1, since these games are really quite different.
-
- Edit file nethack.cnf in the game directory to reflect your particular
- setup and personal preferences, following the comments there. More info
- about settable options can be found in the file opthelp and the Guidebook.
-
- If you compiled in the TERMLIB feature, also move the sys\share\termcap
- file to your game directory.
-
- 8. If you'll be running NetHack from a different subdirectory, you will want
- to "set HACKDIR=c:\games\nh31" (or whatever directory you want to use).
- Add it to your config.sys, if you'll be playing often.
-
- You can also create a special NetHack entry in your Presentation Manager /
- Workplace Shell desktop. This will use the included NetHack icon.
- The following is a sample program description for OS/2 1.3 desktop, but
- it's similar for OS/2 2.0:
-
- Program title: NetHack 3.1
- Path and file name: c:\games\nh31\nethack.cmd
- Parameters:
- Working directory: c:\games\nh31
- Program type: OS/2 Full screen
-
- Naturally you must fill in your own game directory and parameters if you
- want to set any. The program type can be either OS/2 Full screen or OS/2
- Windowed. Note that you should set the executable path to use the .cmd
- file generated by Makefile. This file generates an extra pause after the
- program exit, because otherwise you wouldn't get to see the high score
- list upon quitting due to PM/WPS automatically closing the program window.
- When starting NetHack normally from OS/2 command prompt, the command
- processor starts nethack.exe instead, so no extra pause is generated.
-
- 9. If you want to clear up the temporary files and objects created by the
- compilation process, you may issue "make spotless". This will return your
- source tree to near-distribution condition. Naturally, it will not touch
- your newly built game files in any way.
-
- 10. Play NetHack. If it works, you're done!
-
-
- Notes
- -----
-
- 1) Save files and bones files from previous versions will not work with
- NetHack 3.1. Don't bother trying to keep them.
-
- 2) To install an update of NetHack after changing something, enter "make"
- 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.)
-
- 3) When cross-compiling for OS/2 in DOS, NDMAKE is the best choice because it
- requires the least RAM for itself. Note however, that cross-compilation
- in DOS is discouraged, because it is considered obsolete (OS/2 is really
- a much better place to compile). If you still want to try, here are some
- suggestions:
-
- During linking, the Microsoft linker will need temporary storage space.
- Make sure you have about a meg of free disk where-ever you have defined
- your temporary storage. It is also a good idea to compile with as much
- free RAM as possible. It may otherwise get crowded with the bigger, more
- complex source files (compiler bombs with "out of heap space" or similar).
- If this happens, strip your configuration, zap TSR's, get a better memory
- manager etc.
-
- 4) The file sys\share\termcap.uu is the fixed version of the Fred Fish
- termcap library. You will need to run a uudecode utility on it 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 best
- to unzip a copy in the src directory. That way you will not miss copying
- any files over. Wherever you unzip it, get rid of the included makefile
- since a better version has been provided as Makefile.lib. After creating
- the termcap library file termlib.lib, copy it to src before compiling the
- game main source.
-
- 5) When compiling with MSC 6.0, the maintenance version 6.0A should be used
- instead of the original 6.0, which was all too buggy to successfully build
- NetHack 3.1.
-
- 6) Note that emx 0.8f is the first version of GCC for OS/2 that can properly
- compile NetHack. Earlier versions do not work, because they don't support
- the 16 bit API calls of OS/2.
-
- GCC emx 0.8f does not currently work properly when fseek() function is
- used with text files. This is well documented in the compiler's
- documentation. Unfortunately NetHack uses fseek() in several places in
- connection with text data. This means that some help texts may not come
- out right, but no serious problems should emerge.
-