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