1             Instructions for compiling and installing NetHack 3.4
2                               on an OS/2 system
3             =====================================================
4                                Timo Hakulinen
5                        Last revision: 29 October 1996
6
70.  Read this entire file before starting, and come back to the Notes below if
8    you have any problems.
9
101.  Make sure all the NetHack files are in the appropriate directory
11    structure.  You should have a top directory (e.g. nh33, or whatever you
12    like) with subdirectories dat, doc, include, src, util, sys\share,
13    sys\os2, and win\tty.  You may have other subdirectories under sys and
14    win, but they will not affect compilation for an OS/2 system.  If you do
15    not follow this structure, the makefile will not function properly.  The
16    .c files for the main program belong in src, those for utility programs in
17    util, and OS/2-specific ones in sys\os2.  All the .h files belong in
18    include, the documentation in doc, and assorted data files in dat.  There
19    are also some necessary files in sys\share (pc*.c, random.c, dgn_*.*,
20    lev_*.*).  A more detailed explanation of the directory structure is found
21    in file Files, which should be in the top directory.
22
23    If you downloaded or ftp'd the sources from a UNIX system, the lines may
24    end in UNIX-style newlines instead of the carriage return and line feed
25    pairs used by DOS and OS/2.  You'll have to convert them (with a utility
26    like Rahul Dhesi's "flip").  Also, every file should end with a carriage
27    return / line feed pair, because Microsoft C has had a habit of ignoring
28    the last line of each file otherwise.  Besides, even editing UNIX-style
29    files with DOS editors is often a royal pain.
30
312.  The makefile for OS/2, Makefile.os2, is found in directory sys\os2.  Copy
32    it to directory src and rename it Makefile.  From now on, Makefile.os2
33    will be referred to as "the makefile" in this document.
34
35    The makefile supports the following make utilities:
36
37    NDMAKE      a public domain make utility for DOS by Don Kneller
38    NMAKE       make shipped with Microsoft languages and IBM C Set/2
39    DMAKE       a public domain make for DOS and OS/2 by Dennis Vadura
40
41    Both NDMAKE and DMAKE are available at major archive sites.  The
42    following compilers are supported:
43
44    compiler:                           runs in:            compiles for:
45
46    Microsoft C 5.1                     DOS / OS/2 1.0-Warp OS/2 1.x
47    Microsoft 6.0A (see note 5)         - " -               - " -
48    IBM C Set/2 1.00, Toolkit/2 2.00    OS/2 2.x, Warp      OS/2 2.x, Warp
49    IBM CSet++ 2.00                     OS/2 2.x, Warp      OS/2 2.x, Warp
50    GCC emx 0.8f (see note 6)           OS/2 2.x, Warp      OS/2 2.x, Warp
51
52    Note that code compiled for OS/2 versions 1.0-1.3 runs unmodified in OS/2
53    versions 2.0 and up.  In principle it should be possible to cross compile
54    NetHack 3.4 for OS/2 in DOS using NDMAKE and MSC, but this is not
55    recommended (see note 3).
56
57    If you're using some other compiler than one listed above, you will have
58    to adapt the makefile to your needs.  In particular, change the CC,
59    CFLAGS, LINK, and LFLAGS macros to your C compiler's and linker's liking.
60    See the makefile for more information.
61
62    If you are going to be constructing Fred Fish's termcap library, you'll
63    need Makefile.lib in sys\share (see note 4).
64
653.  Go to the include subdirectory.  First edit config.h according to the
66    comments to match your system and desired set of features.  In particular,
67    make sure that OS2 is defined, and that UNIX, HACKDIR, and COMPRESS are
68    *not* defined.  If you want to try out the new DLB data file library
69    scheme, uncomment DLB.  Note that although the makefile contains some
70    support for this scheme, it's new in NetHack 3.3 and hasn't been tested.
71    If your compiler is ANSI compliant (like practically all OS/2 compilers
72    are), it's probable that nothing else needs to be configured in config.h.
73
74    Next look at os2conf.h.  This file shouldn't need much changing.  If you
75    want to use the hardcoded OS/2 system definitions in def_os2.h instead of
76    the compiler's standard headers, comment out OS2_USESYSHEADERS.  This may
77    become necessary if you are using a compiler which doesn't come with
78    proper system headers by default.  In this case you may have to edit the
79    definitions there, because every compiler has its own way of declaring
80    the necessary system functions and data structures.  In general you
81    should prefer the compiler's offerings, if possible.
82
83    If you are going to compile the game on an HPFS drive, uncomment OS2_HPFS,
84    which enables the use of longer file names during compilation.  The
85    generated executable will only use file names compatible with FAT drives,
86    however.
87
88    If you are using a 32 bit compiler other than GCC emx 0.8f or C Set/2 in
89    OS/2 2.x, force OS2_32BITAPI to be defined.  Otherwise it is defined only
90    for the above mentioned compilers.
91
92    If you are not going to include random.c, because you are using the
93    random number generator provided by your compiler, you will need to
94    comment out RANDOM.
95
96    If you want to muck with different termcap settings, uncomment TERMLIB to
97    enable the use of termcap routines (see note 4).  This is not necessary to
98    create a fully functional game, however.
99
1004.  If you are using another compiler than MSC, GCC, or IBM C Set/2, you may
101    want to look through system.h in the include directory.  This file matches
102    the return and parameter types for system calls and library routines with
103    various flavors of compilers and operating systems.  Leaving this file
104    alone is unlikely to cause problems, but if you get compile errors with
105    any functions in the standard library, it's worth checking the
106    declarations there.
107
1085.  If you want to change the high score list behavior, examine the top of
109    topten.c, in the src directory.  You may want to change the definitions of
110    PERSMAX, POINTSMIN, and ENTRYMAX.
111
1126.  Go to the src directory and edit the top of the makefile.  Be sure that
113    the directory you want the game installed to actually exists.
114
115    You'll need nroff and/or TeX/LaTeX to do the files in doc.  If you don't
116    have either of these, you can skip it.
117
118    If you elected not to use the high quality BSD random number routines by
119    commenting out RANDOM in os2conf.h, comment out (or set equal to nothing)
120    the RANDOM macro in the makefile.
121
122    If you elected to use Fred Fish's termcap library (bundled in as
123    termcap.uu in directory sys\share), you will have to generate termlib.lib
124    from those sources by typing "make -f makefile.lib termlib.lib".  You must
125    set the TERMLIB option in the makefile to link the resulting termlib.lib
126    into the game.
127
128    If you are recompiling after patching your sources, or if you got your
129    files from somewhere other than the official distribution, "touch
130    makedefs.c" to ensure that certain files (onames.h and pm.h) are remade,
131    lest potentially troublesome time stamps fool make.
132
133    If you have lex and yacc programs, or the equivalent flex and bison
134    programs, you can set up the makefile to generate the appropriate .h and
135    .c files from their .l and .y counterparts whenever you recompile.  This
136    is done by changing the do_yacc and do_lex targets in the makefile to
137    depend on targets yacc_act and lex_act instead of yacc_cpy and lex_cpy.
138    Otherwise the makefile will copy pre-generated yacc and lex output files
139    dgn_*.* and lev_*.* from directory sys\share to util and include.
140
141    Now, enter "make all", and take a siesta; your computer will be occupied
142    for a fair amount of time.  If all goes well, you will get an executable.
143
1447.  All the support data files should have been copied to the game directory
145    by the make process.  Here is the complete list in alphabetical order of
146    all the files that should have gotten there during a full build:
147
148    Arc-fila.lev   Arc-filb.lev   Arc-goal.lev   Arc-loca.lev   Arc-strt.lev
149    Bar-fila.lev   Bar-filb.lev   Bar-goal.lev   Bar-loca.lev   Bar-strt.lev
150    Cav-fila.lev   Cav-filb.lev   Cav-goal.lev   Cav-loca.lev   Cav-strt.lev
151    Hea-fila.lev   Hea-filb.lev   Hea-goal.lev   Hea-loca.lev   Hea-strt.lev
152    Kni-fila.lev   Kni-filb.lev   Kni-goal.lev   Kni-loca.lev   Kni-strt.lev
153    Mon-fila.lev   Mon-filb.lev   Mon-goal.lev   Mon-loca.lev   Mon-strt.lev
154    Pri-fila.lev   Pri-filb.lev   Pri-goal.lev   Pri-loca.lev   Pri-strt.lev
155    Ran-fila.lev   Ran-filb.lev   Ran-goal.lev   Ran-loca.lev   Ran-strt.lev
156    Rog-fila.lev   Rog-filb.lev   Rog-goal.lev   Rog-loca.lev   Rog-strt.lev
157    Sam-fila.lev   Sam-filb.lev   Sam-goal.lev   Sam-loca.lev   Sam-strt.lev
158    Tou-fila.lev   Tou-filb.lev   Tou-goal.lev   Tou-loca.lev   Tou-strt.lev
159    Val-fila.lev   Val-filb.lev   Val-goal.lev   Val-loca.lev   Val-strt.lev
160    Wiz-fila.lev   Wiz-filb.lev   Wiz-goal.lev   Wiz-loca.lev   Wiz-strt.lev
161    air.lev        asmodeus.lev   astral.lev     baalz.lev      bigrm-1.lev
162    bigrm-2.lev	   bigrm-3.lev    bigrm-4.lev    bigrm-5.lev    castle.lev
163    cmdhelp        data           dungeon        earth.lev      fakewiz1.lev
164    fakewiz2.lev   fire.lev       help           hh             history
165    juiblex.lev    knox.lev       license        medusa-1.lev   medusa-2.lev
166    minefill.lev   minend-1.lev   minend-2.lev   minetn-1.lev   minetn-2.lev
167    nethack.cmd    nethack.cnf    nethack.exe    nethack.ico    opthelp
168    options        oracle.lev     oracles        orcus.lev      quest.dat
169    recover.exe    rumors         sanctum.lev    soko1-1.lev    soko1-2.lev
170    soko2-1.lev    soko2-2.lev    soko3-1.lev    soko3-2.lev    soko4-1.lev
171    soko4-2.lev    tower1.lev     tower2.lev     tower3.lev     valley.lev
172    water.lev      wizard1.lev    wizard2.lev    wizard3.lev    wizhelp
173
174    Yes.  It's 112 files for a full featured NetHack 3.4.  If any of the files
175    are missing, try to rerun make.  If that doesn't help, you'll have to try
176    to decipher the makefile to find out how to manually create the missing
177    files.  These kinds of troubles shouldn't happen except for two reasons:
178    You've run out of disk space while compiling or your make utility doesn't
179    understand the makefile properly for some reason.  In either case, you
180    should get some warnings from the make, though.
181
182    If you have old record, logfile, or news files in the game directory, they
183    are not overwritten.  Of course, old records from NetHack 3.1 and 3.2 are
184    not worth keeping with 3.4, since these games are really quite different.
185
186    Edit file nethack.cnf in the game directory to reflect your particular
187    setup and personal preferences, following the comments there.  More info
188    about settable options can be found in the file opthelp and the guidebook.
189
190    If you compiled in the TERMLIB feature, also move the sys\share\termcap
191    file to your game directory.
192
1938.  If you'll be running NetHack from a different subdirectory, you will want
194    to "set HACKDIR=c:\games\nh33" (or whatever directory you want to use).
195    Add it to your config.sys, if you'll be playing often.
196
197    You can also create a special NetHack entry in your Presentation Manager /
198    Workplace Shell desktop.  This will use the included NetHack icon.
199    The following is a sample program description for OS/2 1.3 desktop, but
200    it's similar for OS/2 2.0:
201
202    Program title:          NetHack 3.4
203    Path and file name:     c:\games\nh33\nethack.cmd
204    Parameters:
205    Working directory:      c:\games\nh33
206    Program type:           OS/2 Full screen
207
208    Naturally you must fill in your own game directory and parameters if you
209    want to set any.  The program type can be either OS/2 Full screen or OS/2
210    Windowed.  Note that you should set the executable path to use the .cmd
211    file generated by the makefile.  This file generates an extra pause after
212    the program exit, because otherwise you wouldn't get to see the high score
213    list upon quitting due to PM/WPS automatically closing the program window.
214    When starting NetHack normally from OS/2 command prompt, the command
215    processor starts nethack.exe instead, so no extra pause is generated.
216
2179.  If you want to clear up the temporary files and objects created by the
218    compilation process, you may issue "make spotless".  This will return your
219    source tree to near-distribution condition.  Naturally, it will not affect
220    your newly built game files in any way.
221
22210. Play NetHack.  If it works, you're done!
223
224
225Notes
226-----
227
2281)  Save-files and bones-files from previous versions will not work with
229    NetHack 3.4.  Don't bother trying to keep them.
230
2312)  To install an update of NetHack after changing something, enter "make"
232    from the src directory.  If you add, delete, or reorder monsters or
233    objects, or you change the format of saved level files, delete any save
234    and bones files.  (Trying to use such files sometimes produces amusing
235    confusions on the game's part, but usually crashes.)
236
2373)  When cross-compiling for OS/2 in DOS, NDMAKE is the best choice because it
238    requires the least RAM for itself.  Note however, that cross-compilation
239    in DOS is discouraged, because it is considered obsolete (OS/2 is really
240    a much better place to compile).  If you still want to try, here are some
241    suggestions:
242
243    During linking, Microsoft linker will need temporary storage space.  Make
244    sure you have about 1 MB of free disk where ever you have defined your
245    temporary storage.  It is also a good idea to compile with as much free
246    RAM as possible.  It may otherwise get crowded with the bigger, more
247    complex source files (compiler bombs with "out of heap space" or similar).
248    If this happens, strip your configuration, zap TSR's, get a better memory
249    manager etc.
250
2514)  The file sys\share\termcap.uu is the fixed version of the Fred Fish
252    termcap library.  You will need to run a uudecode utility on it to
253    generate the file termcap.zip.  termcap.zip contains several files of
254    termcap routines.  Using them with NetHack involves very little knowledge
255    of the UNIX concept of a termcap database; mostly you need to know enough
256    to set a TERM environment variable.  You can unzip termcap.zip in the
257    sys\share directory, but if you are going to use it, it is probably best
258    to unzip a copy in the src directory.  That way you will not miss copying
259    any files over.  Wherever you unzip it, get rid of the included makefile
260    since a better version has been provided as Makefile.lib.  After creating
261    the termcap library file termlib.lib, copy it to src before compiling the
262    game main source.
263
2645)  When compiling with MSC 6.0, the maintenance version 6.0A should be used
265    instead of the original 6.0, which was all too buggy to successfully build
266    NetHack.
267
2686)  Note that emx 0.8f is the first version of GCC for OS/2 that can properly
269    compile NetHack.  Earlier versions do not work, because they don't support
270    the 16 bit API calls of OS/2.
271
272    GCC emx 0.8f does not currently work properly when fseek() function is
273    used with text files.  This is well documented in the compiler's
274    documentation.  Unfortunately NetHack uses fseek() in several places in
275    connection with text data.  This means that some help texts may not come
276    out right, but no serious problems should emerge.
277