# SCCS Id: @(#)Makefile.os2 3.3 96/10/29 # OS/2 NetHack 3.3 Makefile for OS/2 versions 1.x and 2.x # Copyright (C) 1990, 1991, 1992, 1993, 1996 Timo Hakulinen # # The supported compilers list is mainly from the NetHack 3.1 era. # There should be newer versions of all these compilers nowadays. # # Supported compilers: Microsoft C 5.1 and 6.0A, GCC emx 0.8f, # GCC emx 0.9c, IBM C Set/2 1.00 with Toolkit/2 2.00, IBM CSet++ 2.01. # # NDMAKE ver 4.5, Microsoft/IBM NMAKE, or Dennis Vadura's DMAKE is # required; old MS-MAKE will not work. To enable the appropriate # make utility, uncomment the respective make-specific macros. If # you plan to cross-compile in DOS, your best bet is NDMAKE, since # it requires less memory than NMAKE. To compile in OS/2 use NMAKE, # DMAKE or something compatible. Remember to set $(RLIBS) to real mode # libraries if cross-compiling in DOS, and to protected mode libraries # for compilation in OS/2. # # GNU MAKE for OS/2 seems to be too limited / braindamaged at the # moment for me to bother implementing support for it. Maybe later. # # Copy this file into $(SRC) directory, rename it to "makefile" # (important, many targets rely on it), compile and link inside # $(SRC). If required, termcap library can be built from termcap # sources using makefile.lib in "sys\share" directory. # # "MSC" in this makefile refers to Microsoft C 5.1 and 6.0A. # Whenever the distinction is significant, it is indicated. # # "GCC" refers to GCC emx only. No other ports of GCC are supported. # Additional credits for honing GCC support for 3.2 go to Ronald # Van Iwaarden (rrt0136@ibm.net) and Stefan Neis (neis@cs.uni-sb.de). # # "CSet/2" refers to both older CSet/2 ver 1 (IBM 32 bit C compiler for # OS/2 2.0) and newer CSet++ ver 2 (C/C++ compiler). Original CSet/2 # support courtesy Jeff Urlwin (jurlwin@gandalf.umcs.maine.edu). # CSet++ support courtesy Helge Hafting (hhafting@intermec.no) and # Justin Frank (belford-manor@worldnet.att.net). # # "OMF" is short for "Object Module Format" and refers to the # standard OS/2 object format, which e.g. link386 uses. MSC and # CSet/2 always produce OMF object files, and GCC can be instructed # to produce them with proper switches (see below). # # "a.out" refers to Unix object file format, which is used by GCC # in its default compilation mode. These object files must be # linked using GCC's own linker to produce a proper OS/2 executable. # GDB debugger shipped with GCC can only be used with a.out object # format. # # Note that the default setup in this makefile is my personal setup, # which you will have to adapt to your configuration. # # # Compiler and linker selection. # #CC = cl # MSC CC = gcc # GCC #CC = icc # CSet/2 #LINK = link # MSC LINK = link386 # GCC OMF, CSet/2 # # Make syntax peculiarities. # # Enable the uppermost eight lines for NDMAKE, the middle eight # for NMAKE (MSC, CSet/2), and the lowermost eight for DMAKE. # #MAKEB = ndmake # Executable name (change if necessary) #CMD = # Command processor name if required #AB = $*.c # Base name of the target in target action #CB = $*.c # - " - dependent #B = ( # Command line begin in shell one-liners #E = ) # - " - end - " - #S = ; # Command separator - " - #P = % # Literal percent sign #MAKEB = nmake #CMD = #AB = $(@B).c #CB = $$(@B).c #B = ( #E = ) #S = & #P = %% MAKEB = dmake CMD = cmd /C AB = $(@:B).c CB = $$(@:B).c B = $(CMD) " E = " S = & P = % # # Most makes execute actions automatically inside a subshell, # which makes even the shell internals work ok. This applies # to NDMAKE and NMAKE. DMAKE wants it spelled out for it. # ECHO = $(CMD) @echo RM = $(CMD) del CP = $(CMD) copy CAT = $(CMD) type # # For those of us who have these on PC. # #YACC = yacc #LEX = lex YACC = bison -y LEX = flex # # For extracting NetHack icon. # UUDECODE = uudecode # # For people with TeX and LaTeX. # LATEX = latex # # If you have TOUCH, some things become slightly easier. # TOUCH = touch # # Standard file naming for LEX and YACC output may vary in PC # installations. These three are probably the most generally used # names. # YTABC = y_tab.c YTABH = y_tab.h LEXYYC = lexyy.c # # Source tree base directory. # NHSRC = \nethack\3.3.1\uunet # # Source directories. Makedefs hardcodes these, don't change them. # INCL = $(NHSRC)\include # NetHack include files DAT = $(NHSRC)\dat # NetHack data files DOC = $(NHSRC)\doc # NetHack documentation files UTIL = $(NHSRC)\util # Utility source SRC = $(NHSRC)\src # Main source WIN = $(NHSRC)\win\tty # Window system specific source SYS = $(NHSRC)\sys\os2 # System specific source SSYS = $(NHSRC)\sys\share # Shared system files # # Modifiable directories. Set these according to your setup and # preferences. They must all be present prior to compilation. # OBJ, TEMP and GAMEDIR should all preferably be separate and, # in particular, not the same as any of the source directories. # Note that DMAKE may dislike drive designators in paths because # it misinterprets the colon as being part of a make rule. In that # case, all directories have to reside on the same drive. # OBJ = \tmp\obj # Object files TEMP = \tmp\bin # Temporary files during make process GAMEDIR = \games\nh331 # Game directory PLIBP = c:\emx\lib # Protected mode C libraries RLIBP = c:\emx\lib # Possible real mode C libraries TLIBP = \toolkt20\os2lib # CSet/2 Toolkit libpath (OS2386.LIB) # # The game name and description. # GAME = nethack GAMEDES = "NetHack 3.3.1" # # Only if you're using CSet/2. Define the upper line for ver. 1, # the lower one for ver. 2 (= CSet++). # #CSETVER = /DOS2_CSET2_VER_1 CSETVER = /DOS2_CSET2_VER_2 # # The uppermost two lines for MSC, the middle two for GCC, and # the lowermost two for CSet/2. # # MSC: compile only, compiler id, large memory model, optimization level, # remove stack probes, 80286 instruction set, dedicated datasegment for # items >= 10 bytes, pack structures on 1 byte boundaries, generate code # for 8087 coprocessor, compiler warning level, include file path, invoke # large model compiler, debug flags, ANSI conformance. # # GCC: compile only, compiler id, object format selection, warnings, # include file path, debug flags, ANSI conformance. # # CSet/2: compile only, compiler id, migration lib, remove stack probes, # large 32 bit memory model, fast integer code, optimize (to avoid a # compiler bug - sometimes it *does* work that way around), don't print # IBM logo, force optlink linkage on function calls, warning level, # include file path, debug flags, ANSI conformance. # #CFLAGS = /c /DOS2_MSC /AL /O /Gs /G2 /Gt10 /Zp1 /FPi $(WARN) /I$(INCL) $(BIGC) $(CDFLAGS) $(STDC) #O = /Fo CFLAGS = -c -DOS2_GCC $(GCCO) $(WARN) -I$(INCL) $(CDFLAGS) $(STDC) O = -s -O -o #CFLAGS = /c /DOS2_CSET2 $(CSETVER) /Sm /Gs+ /Gt- /Gi+ /O+ /Q+ /Mp $(WARN) /I$(INCL) $(CDFLAGS) $(STDC) #O = /Fo # # Compiler warning levels. These are really for development, so # they are commented out in general distribution to save the user # from masses of benign warnings. If any problems arise, however, # they may help in finding the trouble. # # MSC: warning level 3 is highest in 5.1, second highest in 6.0. # Cries a lot, but for no real cause. Warning level 0 for distribution. # # GCC: max. reasonable GCC warning levels. Can't use -Wall, because then # it would whine about all the zillions of unused declarations etc. # Even with these switches you'll get a lot of warnings, but they should # all be benign. # # CSet/2: warning level 3. The second optional parameter gives # lots of extra warnings. # #WARN = /W0 #/W3 # MSC WARN = #-W -Wimplicit -Wreturn-type -Wunused -Wformat -Wswitch -Wshadow -Wcast-qual -Wwrite-strings -DGCC_WARN # GCC #WARN = #/W3 #/Kbper # CSet/2 # # GCC object format selection. The upper line for standard OS/2 OMF # object format, the lower for Unix style a.out format. # GCCO = -Zomf -Zsys # GCC OMF #GCCO = # GCC a.out # # MSC 5.1 needs the large model first pass of the compiler. # Not needed for later versions. # BIGC = #BIGC = /B1 d:\binb\c1l.exe # MSC 5.1 # # Unset CL to avoid troubles with conflicting switches in MSC 6.0. # CL = # # MSC, CSet/2: don't ignore case in symbols, no default lib search, # stack 8KB, allow max 1024 segments in program. # # GCC: likes a big stack. # # CSet/2: give it a bit more stack since we can. # #LFLAGS = /noig /nod /stack:8192 /seg:1024 $(LDFLAGS) # MSC LFLAGS = /noig /stack:40000 # GCC OMF #LFLAGS = /noig /nod /stack:32768 /seg:1024 $(LDFLAGS) # CSet/2 # # Prepare for a debugger. # CDFLAGS = LDFLAGS = #CDFLAGS = /Zi # CodeView (MSC) #LDFLAGS = /CO # - " - #CDFLAGS = -g # GDB (GCC a.out) #LDFLAGS = -g # - " - #CDFLAGS = /Ti+ # IPMD (CSet/2) #LDFLAGS = /CO # - " - # # How to produce the most ANSI-like environment. # #STDC = # MSC 5.1 STDC = /D__STDC__ # MSC 6.0, CSet/2 STDC = -ansi # GCC # # Possible system object files required during linking. # #SYSOBJ = # MSC, GCC a.out, CSet/2 SYSOBJ = $(PLIBP)\crt0.obj $(PLIBP)\end.lib# GCC OMF # # Compiler library selection. Change if necessary. # # MSC: Protected mode C libraries for 8087 emulator, # OS/2 API entry points. # # GCC emx 0.8 OMF: C standard lib, extra GCC lib, static system lib, # OS/2 API entry points. # # GCC emx 0.9 OMF: C single-threaded libs, Unix system call alias lib, # extra GCC lib, single threaded system lib, OS/2 API entry points. # Note that emx changed library naming convention between 0.8 and 0.9. # # GCC a.out: extra GCC lib, C standard lib, extra GCC lib (again), # OS/2 API entry points. # # CSet/2: C standard libraries, OS/2 API entry points. # Note that ver 1 needs lib dde4sbm.lib whereas ver 2 doesn't. # #PLIBS = $(PLIBP)\llibcep $(PLIBP)\doscalls # MSC 5.1 #PLIBS = $(PLIBP)\llibcep $(PLIBP)\os2 # MSC 6.0 #PLIBS = $(PLIBP)\libc $(PLIBP)\libgcc $(PLIBP)\libsys $(PLIBP)\libos2 # GCC emx 0.8 OMF PLIBS = $(PLIBP)\st\c $(PLIBP)\st\c_app $(PLIBP)\c_alias $(PLIBP)\gcc $(PLIBP)\st\sys $(PLIBP)\os2 # GCC emx 0.9 OMF #PLIBS = -lgcc -lc -lgcc -los2 # GCC a.out (defining -lgcc twice is required) #PLIBS = $(PLIBP)\dde4sbs.lib $(PLIBP)\dde4sbm.lib $(TLIBP)\os2386.lib # CSet/2 ver 1 #PLIBS = $(PLIBP)\dde4sbs.lib $(TLIBP)\os2386.lib # CSet++ ver 2 # # C libraries used by makedefs, lev_comp and dgn_comp (change if # necessary). If compilation is done in DOS, enable the upper line # possibly setting the library name to something else, if in OS/2, # enable the lower line (protected mode libraries). # #RLIBS = $(RLIBP)\llibcer RLIBS = $(PLIBS) # # Default compilation skeletons. The uppermost six are for # MSC and CSet/2 and the lowermost six for GCC. # #SRCCC = $(CC) $(CFLAGS) $(O)$@ $(SRC)\$(AB) #UTILCC = $(CC) $(CFLAGS) $(O)$@ $(UTIL)\$(AB) #SYSCC = $(CC) $(CFLAGS) $(O)$@ $(SYS)\$(AB) #SSYSCC = $(CC) $(CFLAGS) $(O)$@ $(SSYS)\$(AB) #PSYSCC = $(CC) $(CFLAGS) $(O)$@ $(SSYS)\pc$(AB) #WINCC = $(CC) $(CFLAGS) $(O)$@ $(WIN)\$(AB) SRCCC = $(CC) $(CFLAGS) $(O) $@ $(AB) UTILCC = $(B) cd $(UTIL) $(S) $(CC) $(CFLAGS) $(O) $@ $(AB) $(E) SYSCC = $(B) cd $(SYS) $(S) $(CC) $(CFLAGS) $(O) $@ $(AB) $(E) SSYSCC = $(B) cd $(SSYS) $(S) $(CC) $(CFLAGS) $(O) $@ $(AB) $(E) PSYSCC = $(B) cd $(SSYS) $(S) $(CC) $(CFLAGS) $(O) $@ pc$(AB) $(E) WINCC = $(B) cd $(WIN) $(S) $(CC) $(CFLAGS) $(O) $@ $(AB) $(E) # # Default linker skeletons. The upper six lines for everything # that uses standard OS/2 object format (MSC, CSet/2, GCC OMF), # the lower six for GCC a.out format. # GAMELN = $(LINK) @$(TEMP)\$(GAME).rsp MKDFLN = $(LINK) @$(TEMP)\makedefs.rsp LEVCLN = $(LINK) @$(TEMP)\lev_comp.rsp DGNCLN = $(LINK) @$(TEMP)\dgn_comp.rsp RCVRLN = $(LINK) @$(TEMP)\recover.rsp DLBRLN = $(LINK) @$(TEMP)\dlb.rsp #GAMELN = $(CC) $(LDFLAGS) -o $(GAMEDIR)\$(GAME).exe $(TEMP)\$(GAMEDEF) $(SYSOBJ) $(HOBJ) $(PLIBS) $(TERMLIB) #MKDFLN = $(CC) $(LDFLAGS) -o $(TEMP)\makedefs.exe $(TEMP)\$(MKDFDEF) $(SYSOBJ) $(MAKEOBJS) $(PLIBS) #LEVCLN = $(CC) $(LDFLAGS) -o $(TEMP)\lev_comp.exe $(TEMP)\$(LEVCDEF) $(SYSOBJ) $(SPLEVOBJS) $(PLIBS) #DGNCLN = $(CC) $(LDFLAGS) -o $(TEMP)\dgn_comp.exe $(TEMP)\$(DGNCDEF) $(SYSOBJ) $(DGNCOMPOBJS) $(PLIBS) #RCVRLN = $(CC) $(LDFLAGS) -o $(GAMEDIR)\recover.exe $(TEMP)\$(RCVRDEF) $(SYSOBJ) $(RECOVOBJS) $(PLIBS) #DLBRLN = $(CC) $(LDFLAGS) -o $(TEMP)\dlb.exe $(TEMP)\$(DLBDEF) $(SYSOBJ) $(DLBOBJS) $(PLIBS) # # OS/2 module definition files for NetHack, # makedefs, dgn_comp, lev_comp, recover, dlb. # GAMEDEF = $(GAME).def MKDFDEF = makedefs.def LEVCDEF = lev_comp.def DGNCDEF = dgn_comp.def RCVRDEF = recover.def DLBDEF = dlb.def # # For compilation in DOS, enable the lower three lines and # disable the upper three. # MKDFMD = $(TEMP)\$(MKDFDEF) LEVCMD = $(TEMP)\$(LEVCDEF) DGNCMD = $(TEMP)\$(DGNCDEF) #MKDFMD = #LEVCMD = #DGNCMD = # # Optional high-quality BSD random number generation routines # (see os2conf.h). Set to nothing if not used. # RANDOM = $(OBJ)\random.o #RANDOM = # # If TERMLIB is defined in os2conf.h, comment out the upper line and # uncomment the lower. If the termcap-library doesn't exist, use # sys\share\makefile.lib to build it. # TERMLIB = #TERMLIB = termlib.lib # # Short / long file name selection for FAT and HPFS. # Only three files need consideration. # #GUIDEBOO = Guideboo # FAT #PATCHLEV = patchlev # - " - #DATABASE = data.bas # - " - GUIDEBOO = Guidebook # HPFS PATCHLEV = patchlevel # - " - DATABASE = data.base # - " - # # If you have LaTeX and want to create the NetHack Guidebook in TeX # device-independent file format, comment out the upper line and # uncomment the lower. # GUIDE = #GUIDE = $(TEMP)\$(GUIDEBOO).dvi # # Set WINOBJ lines corresponding to your desired combination # of windowing systems. Also set windowing systems in config.h. # # A straight tty port using no native windowing system is the # only choice for now. # WINOBJ = $(OBJ)\getline.o $(OBJ)\termcap.o $(OBJ)\topl.o $(OBJ)\wintty.o # # The default make target, so just typing 'make' is useful. # Has to be the first target in the makefile. # default : all # # If you have yacc and lex programs and make any changes, uncomment # the lowermost two lines and comment out the others. If you make # changes to the .y and .l files but prefer processing the files # separately elsewhere, activate the middle two lines, so your changes # don't get overwritten. # do_yacc : yacc_cpy # use pre-generated files do_lex : lex_cpy # - " - #do_yacc : yacc_msg # show message if changed #do_lex : lex_msg # - " - #do_yacc : yacc_act # re-process files #do_lex : lex_act # - " - # # If you have the TOUCH utility the upper line is ok. Otherwise # the lower one does the same albeit in an ugly manner. Besides, # the latter method only works for text files. # #do_touch : realtouch do_touch : faketouch # # If you don't have uudecode program, use the upper line. # If you still want the icon, you'll have to extract the # file manually somewhere else. # do_icon : icon_msg # show message if changed #do_icon : icon_act # extract icon file # # If you don't want to generate nethack.cmd, use the upper line. # This could be the case, e.g., if you use a different shell than # the standard cmd.exe. # #do_cmd : cmd_msg # show message do_cmd : cmd_act # generate nethack.cmd # # If you want to try the data librarian scheme to reduce # the amount of data files in the NetHack home directory, comment # out the lower line and uncomment the upper. Also, make sure # that DLB is defined in config.h. # # NOTE: this feature is presently untested under OS/2. # #do_dlb : dlb_yup do_dlb : dlb_nope ###################################################################### # # Nothing below this line should have to be changed. # # Other things that have to be reconfigured are in # config.h, os2conf.h and possibly system.h. # # # The game filename. # GAMEFILE = $(GAMEDIR)\$(GAME).exe # # Object files for makedefs. # MAKEOBJS = $(OBJ)\makedefs.o $(OBJ)\monst.o $(OBJ)\objects.o # # Object files for special levels compiler. # SOBJ01 = $(OBJ)\lev_yacc.o $(OBJ)\lev_lex.o $(OBJ)\lev_main.o $(OBJ)\alloc.o SOBJ02 = $(OBJ)\monst.o $(OBJ)\objects.o $(OBJ)\panic.o $(OBJ)\decl.o SOBJ03 = $(OBJ)\drawing.o SPLEVOBJS = $(SOBJ01) $(SOBJ02) $(SOBJ03) # # Object files for dungeon compiler. # DOBJ01 = $(OBJ)\dgn_yacc.o $(OBJ)\dgn_lex.o $(OBJ)\dgn_main.o DOBJ02 = $(OBJ)\panic.o $(OBJ)\alloc.o DGNCOMPOBJS = $(DOBJ01) $(DOBJ02) # # Object files for recovery utility. # RECOVOBJS = $(OBJ)\recover.o # # Object files for dlb. # DLBOBJS = $(OBJ)\dlb_main.o $(OBJ)\dlb.o $(OBJ)\alloc.c $(OBJ)\panic.o # # Data files for dlb. # DATHELP = \ $(GAMEDIR)\help $(GAMEDIR)\hh $(GAMEDIR)\cmdhelp $(GAMEDIR)\history \ $(GAMEDIR)\opthelp $(GAMEDIR)\wizhelp SPEC_LEVS = \ $(GAMEDIR)\asmodeus.lev $(GAMEDIR)\baalz.lev $(GAMEDIR)\bigrm-1.lev \ $(GAMEDIR)\bigrm-2.lev $(GAMEDIR)\bigrm-3.lev $(GAMEDIR)\bigrm-4.lev \ $(GAMEDIR)\castle.lev $(GAMEDIR)\fakewiz1.lev $(GAMEDIR)\fakewiz2.lev \ $(GAMEDIR)\juiblex.lev $(GAMEDIR)\knox.lev $(GAMEDIR)\medusa-1.lev \ $(GAMEDIR)\medusa-2.lev $(GAMEDIR)\minend-1.lev $(GAMEDIR)\minend-2.lev \ $(GAMEDIR)\minefill.lev $(GAMEDIR)\minetn-1.lev $(GAMEDIR)\minetn-2.lev \ $(GAMEDIR)\oracle.lev $(GAMEDIR)\orcus.lev $(GAMEDIR)\sanctum.lev \ $(GAMEDIR)\tower1.lev $(GAMEDIR)\tower2.lev $(GAMEDIR)\tower3.lev \ $(GAMEDIR)\valley.lev $(GAMEDIR)\wizard1.lev $(GAMEDIR)\wizard2.lev \ $(GAMEDIR)\wizard3.lev $(GAMEDIR)\astral.lev $(GAMEDIR)\air.lev \ $(GAMEDIR)\earth.lev $(GAMEDIR)\fire.lev $(GAMEDIR)\water.lev \ $(GAMEDIR)\soko1-1.lev $(GAMEDIR)\soko1-2.lev \ $(GAMEDIR)\soko2-1.lev $(GAMEDIR)\soko2-2.lev \ $(GAMEDIR)\soko3-1.lev $(GAMEDIR)\soko3-2.lev \ $(GAMEDIR)\soko4-1.lev $(GAMEDIR)\soko4-2.lev QUEST_LEVS = \ $(GAMEDIR)\Arc-goal.lev $(GAMEDIR)\Arc-fila.lev $(GAMEDIR)\Arc-filb.lev \ $(GAMEDIR)\Arc-loca.lev $(GAMEDIR)\Arc-strt.lev \ $(GAMEDIR)\Bar-goal.lev $(GAMEDIR)\Bar-fila.lev $(GAMEDIR)\Bar-filb.lev \ $(GAMEDIR)\Bar-loca.lev $(GAMEDIR)\Bar-strt.lev \ $(GAMEDIR)\Cav-goal.lev $(GAMEDIR)\Cav-fila.lev $(GAMEDIR)\Cav-filb.lev \ $(GAMEDIR)\Cav-loca.lev $(GAMEDIR)\Cav-strt.lev \ $(GAMEDIR)\Hea-goal.lev $(GAMEDIR)\Hea-fila.lev $(GAMEDIR)\Hea-filb.lev \ $(GAMEDIR)\Hea-loca.lev $(GAMEDIR)\Hea-strt.lev \ $(GAMEDIR)\Kni-goal.lev $(GAMEDIR)\Kni-fila.lev $(GAMEDIR)\Kni-filb.lev \ $(GAMEDIR)\Kni-loca.lev $(GAMEDIR)\Kni-strt.lev \ $(GAMEDIR)\Mon-goal.lev $(GAMEDIR)\Mon-fila.lev $(GAMEDIR)\Mon-filb.lev \ $(GAMEDIR)\Mon-loca.lev $(GAMEDIR)\Mon-strt.lev \ $(GAMEDIR)\Pri-goal.lev $(GAMEDIR)\Pri-fila.lev $(GAMEDIR)\Pri-filb.lev \ $(GAMEDIR)\Pri-loca.lev $(GAMEDIR)\Pri-strt.lev \ $(GAMEDIR)\Ran-goal.lev $(GAMEDIR)\Ran-fila.lev $(GAMEDIR)\Ran-filb.lev \ $(GAMEDIR)\Ran-loca.lev $(GAMEDIR)\Ran-strt.lev \ $(GAMEDIR)\Rog-goal.lev $(GAMEDIR)\Rog-fila.lev $(GAMEDIR)\Rog-filb.lev \ $(GAMEDIR)\Rog-loca.lev $(GAMEDIR)\Rog-strt.lev \ $(GAMEDIR)\Sam-goal.lev $(GAMEDIR)\Sam-fila.lev $(GAMEDIR)\Sam-filb.lev \ $(GAMEDIR)\Sam-loca.lev $(GAMEDIR)\Sam-strt.lev \ $(GAMEDIR)\Tou-goal.lev $(GAMEDIR)\Tou-fila.lev $(GAMEDIR)\Tou-filb.lev \ $(GAMEDIR)\Tou-loca.lev $(GAMEDIR)\Tou-strt.lev \ $(GAMEDIR)\Val-goal.lev $(GAMEDIR)\Val-fila.lev $(GAMEDIR)\Val-filb.lev \ $(GAMEDIR)\Val-loca.lev $(GAMEDIR)\Val-strt.lev \ $(GAMEDIR)\Wiz-goal.lev $(GAMEDIR)\Wiz-fila.lev $(GAMEDIR)\Wiz-filb.lev \ $(GAMEDIR)\Wiz-loca.lev $(GAMEDIR)\Wiz-strt.lev VARDATD = \ $(GAMEDIR)\data $(GAMEDIR)\oracles $(GAMEDIR)\options \ $(GAMEDIR)\quest.dat $(GAMEDIR)\rumors DATDLB = $(DATHELP) $(GAMEDIR)\dungeon $(SPEC_LEVS) $(QUEST_LEVS) $(VARDATD) # # Object files for the game itself. # VOBJ01 = $(OBJ)\allmain.o $(OBJ)\alloc.o $(OBJ)\apply.o $(OBJ)\artifact.o VOBJ02 = $(OBJ)\attrib.o $(OBJ)\ball.o $(OBJ)\bones.o $(OBJ)\botl.o VOBJ03 = $(OBJ)\cmd.o $(OBJ)\dbridge.o $(OBJ)\decl.o $(OBJ)\detect.o VOBJ04 = $(OBJ)\dig.o $(OBJ)\display.o $(OBJ)\dlb.o $(OBJ)\do.o VOBJ05 = $(OBJ)\do_name.o $(OBJ)\do_wear.o $(OBJ)\dog.o $(OBJ)\dogmove.o VOBJ06 = $(OBJ)\dokick.o $(OBJ)\dothrow.o $(OBJ)\drawing.o $(OBJ)\dungeon.o VOBJ07 = $(OBJ)\eat.o $(OBJ)\end.o $(OBJ)\engrave.o $(OBJ)\exper.o VOBJ08 = $(OBJ)\explode.o $(OBJ)\extralev.o $(OBJ)\files.o $(OBJ)\fountain.o VOBJ09 = $(OBJ)\hack.o $(OBJ)\hacklib.o $(OBJ)\invent.o $(OBJ)\light.o VOBJ10 = $(OBJ)\lock.o $(OBJ)\mail.o $(OBJ)\main.o $(OBJ)\makemon.o VOBJ11 = $(OBJ)\mcastu.o $(OBJ)\mhitm.o $(OBJ)\mhitu.o $(OBJ)\minion.o VOBJ12 = $(OBJ)\mklev.o $(OBJ)\mkmap.o $(OBJ)\mkmaze.o $(OBJ)\mkobj.o VOBJ13 = $(OBJ)\mkroom.o $(OBJ)\mon.o $(OBJ)\mondata.o $(OBJ)\monmove.o VOBJ14 = $(OBJ)\monst.o $(OBJ)\monstr.o $(OBJ)\mplayer.o $(OBJ)\mthrowu.o VOBJ15 = $(OBJ)\muse.o $(OBJ)\music.o $(OBJ)\o_init.o $(OBJ)\objects.o VOBJ16 = $(OBJ)\objnam.o $(OBJ)\options.o $(OBJ)\os2.o $(OBJ)\pager.o VOBJ17 = $(OBJ)\pcsys.o $(OBJ)\pickup.o $(OBJ)\pline.o $(OBJ)\polyself.o VOBJ18 = $(OBJ)\potion.o $(OBJ)\pray.o $(OBJ)\priest.o $(OBJ)\quest.o VOBJ19 = $(OBJ)\questpgr.o $(OBJ)\read.o $(OBJ)\rect.o $(OBJ)\region.o $(OBJ)\restore.o VOBJ20 = $(OBJ)\rip.o $(OBJ)\rnd.o $(OBJ)\rumors.o $(OBJ)\save.o VOBJ21 = $(OBJ)\shk.o $(OBJ)\shknam.o $(OBJ)\sit.o $(OBJ)\sounds.o VOBJ22 = $(OBJ)\sp_lev.o $(OBJ)\spell.o $(OBJ)\steal.o $(OBJ)\teleport.o VOBJ23 = $(OBJ)\timeout.o $(OBJ)\topten.o $(OBJ)\track.o $(OBJ)\trap.o VOBJ24 = $(OBJ)\tty.o $(OBJ)\u_init.o $(OBJ)\uhitm.o $(OBJ)\unix.o VOBJ25 = $(OBJ)\vault.o $(OBJ)\vision.o $(OBJ)\vis_tab.o $(OBJ)\weapon.o VOBJ26 = $(OBJ)\were.o $(OBJ)\wield.o $(OBJ)\windows.o $(OBJ)\wizard.o VOBJ27 = $(OBJ)\worm.o $(OBJ)\worn.o $(OBJ)\write.o $(OBJ)\zap.o VOBJ28 = $(WINOBJ) $(OBJ)\role.o $(OBJ)\steed.o VOBJ29 = $(RANDOM) HHOBJ = $(OBJ)\version.o VOBJ = $(VOBJ01) $(VOBJ02) $(VOBJ03) $(VOBJ04) $(VOBJ05) $(VOBJ06) $(VOBJ07) \ $(VOBJ08) $(VOBJ09) $(VOBJ10) $(VOBJ11) $(VOBJ12) $(VOBJ13) $(VOBJ14) \ $(VOBJ15) $(VOBJ16) $(VOBJ17) $(VOBJ18) $(VOBJ19) $(VOBJ20) $(VOBJ21) \ $(VOBJ22) $(VOBJ23) $(VOBJ24) $(VOBJ25) $(VOBJ26) $(VOBJ27) $(VOBJ28) \ $(VOBJ29) HOBJ = $(VOBJ) $(HHOBJ) EXTERN_H = #$(INCL)\extern.h OS2CONF_H = $(INCL)\os2conf.h $(INCL)\micro.h $(INCL)\system.h $(EXTERN_H) GLOBAL_H = $(INCL)\global.h $(INCL)\coord.h $(OS2CONF_H) CONFIG_H = $(INCL)\config.h $(INCL)\config1.h $(INCL)\tradstdc.h $(GLOBAL_H) TRAP_H = $(INCL)\trap.h PERMONST_H = $(INCL)\permonst.h $(INCL)\monattk.h $(INCL)\monflag.h YOU_H = $(INCL)\you.h $(INCL)\attrib.h $(PERMONST_H) $(INCL)\mondata.h \ $(INCL)\monst.h $(INCL)\youprop.h $(INCL)\prop.h $(INCL)\pm.h DECL_H = $(INCL)\decl.h $(INCL)\spell.h $(INCL)\obj.h $(YOU_H) \ $(INCL)\onames.h $(INCL)\color.h HACK_H = $(CONFIG_H) $(DECL_H) $(INCL)\monsym.h $(INCL)\mkroom.h \ $(INCL)\objclass.h $(TRAP_H) $(INCL)\engrave.h $(INCL)\flag.h \ $(INCL)\rm.h $(INCL)\dungeon.h $(INCL)\hack.h $(INCL)\display.h \ $(INCL)\vision.h $(INCL)\wintty.h $(INCL)\wintype.h $(INCL)\align.h \ $(INCL)\winprocs.h # # The default target. # all : makedefs dgn_comp lev_comp recover $(GAME) dat $(GUIDE) $(ECHO) Done. # # Definition file creation. # $(TEMP)\$(GAMEDEF) : $(MAKEB) DD_NAME=$(GAME) DD_DESC=$(GAMEDES) DD_TARG=$@ do_def $(TEMP)\$(MKDFDEF) : $(MAKEB) DD_NAME=makedefs DD_DESC="Definitions compiler" DD_TARG=$@ do_def $(TEMP)\$(DGNCDEF) : $(MAKEB) DD_NAME=dgn_comp DD_DESC="Dungeon compiler" DD_TARG=$@ do_def $(TEMP)\$(LEVCDEF) : $(MAKEB) DD_NAME=lev_comp DD_DESC="Level compiler" DD_TARG=$@ do_def $(TEMP)\$(RCVRDEF) : $(MAKEB) DD_NAME=recover DD_DESC="Recovery utility" DD_TARG=$@ do_def $(TEMP)\$(DLBDEF) : $(MAKEB) DD_NAME=dld DD_DESC="Archive utility" DD_TARG=$@ do_def do_def : $(ECHO) NAME $(DD_NAME) WINDOWCOMPAT> $(DD_TARG) $(ECHO) DESCRIPTION '$(DD_DESC)'>> $(DD_TARG) $(ECHO) PROTMODE>> $(DD_TARG) $(ECHO) EXETYPE OS2>> $(DD_TARG) # # The main target. # $(GAME) : $(GAMEDIR)\$(GAME).exe $(GAME).exe : $(GAMEDIR)\$(GAME).exe $(GAMEDIR)\$(GAME).exe : $(TEMP)\$(GAME).rsp $(GAMELN) $(TEMP)\$(GAME).rsp : $(HOBJ) $(TEMP)\$(GAMEDEF) $(ECHO) $(SYSOBJ) $(VOBJ01) +> $@ $(ECHO) $(VOBJ02) +>> $@ $(ECHO) $(VOBJ03) +>> $@ $(ECHO) $(VOBJ04) +>> $@ $(ECHO) $(VOBJ05) +>> $@ $(ECHO) $(VOBJ06) +>> $@ $(ECHO) $(VOBJ07) +>> $@ $(ECHO) $(VOBJ08) +>> $@ $(ECHO) $(VOBJ09) +>> $@ $(ECHO) $(VOBJ10) +>> $@ $(ECHO) $(VOBJ11) +>> $@ $(ECHO) $(VOBJ12) +>> $@ $(ECHO) $(VOBJ13) +>> $@ $(ECHO) $(VOBJ14) +>> $@ $(ECHO) $(VOBJ15) +>> $@ $(ECHO) $(VOBJ16) +>> $@ $(ECHO) $(VOBJ17) +>> $@ $(ECHO) $(VOBJ18) +>> $@ $(ECHO) $(VOBJ19) +>> $@ $(ECHO) $(VOBJ20) +>> $@ $(ECHO) $(VOBJ21) +>> $@ $(ECHO) $(VOBJ22) +>> $@ $(ECHO) $(VOBJ23) +>> $@ $(ECHO) $(VOBJ24) +>> $@ $(ECHO) $(VOBJ25) +>> $@ $(ECHO) $(VOBJ26) +>> $@ $(ECHO) $(VOBJ27) +>> $@ $(ECHO) $(VOBJ28) +>> $@ $(ECHO) $(VOBJ29) +>> $@ $(ECHO) $(HHOBJ)>> $@ $(ECHO) $(GAMEDIR)\$(GAME).exe>> $@ $(ECHO) $(TEMP)\$(GAME)>> $@ $(ECHO) $(PLIBS) $(TERMLIB)>> $@ $(ECHO) $(TEMP)\$(GAMEDEF) $(LFLAGS);>> $@ # # Targets for makedefs. # makedefs : $(TEMP)\makedefs.exe $(TEMP)\makedefs.exe : $(TEMP)\makedefs.rsp $(MKDFLN) $(TEMP)\makedefs.rsp : $(MAKEOBJS) $(TEMP)\$(MKDFDEF) $(ECHO) $(SYSOBJ) $(MAKEOBJS)> $@ $(ECHO) $(TEMP)\makedefs.exe>> $@ $(ECHO) nul>> $@ $(ECHO) $(RLIBS)>> $@ $(ECHO) $(MKDFMD) $(LFLAGS);>> $@ $(OBJ)\makedefs.o : $(UTIL)\$(CB) $(CONFIG_H) $(INCL)\permonst.h $(INCL)\objclass.h \ $(INCL)\monsym.h $(INCL)\artilist.h $(INCL)\qtext.h $(UTILCC) # # Targets for the special levels compiler. # lev_comp : $(TEMP)\lev_comp.exe $(TEMP)\lev_comp.exe : $(TEMP)\lev_comp.rsp $(LEVCLN) $(TEMP)\lev_comp.rsp : $(SPLEVOBJS) $(TEMP)\$(LEVCDEF) $(ECHO) $(SYSOBJ) $(SOBJ01) +> $@ $(ECHO) $(SOBJ02) +>> $@ $(ECHO) $(SOBJ03)>> $@ $(ECHO) $(TEMP)\lev_comp.exe>> $@ $(ECHO) nul>> $@ $(ECHO) $(RLIBS)>> $@ $(ECHO) $(LEVCMD) $(LFLAGS);>> $@ $(OBJ)\lev_yacc.o : $(UTIL)\$(CB) $(HACK_H) $(INCL)\sp_lev.h $(UTILCC) $(OBJ)\lev_lex.o : $(UTIL)\$(CB) $(HACK_H) $(INCL)\sp_lev.h $(INCL)\lev_comp.h $(UTILCC) $(OBJ)\lev_main.o : $(UTIL)\$(CB) $(HACK_H) $(INCL)\sp_lev.h $(INCL)\tcap.h $(UTILCC) $(UTIL)\lev_yacc.c : $(UTIL)\lev_comp.y $(MAKEB) YY=lev do_yacc $(UTIL)\lev_lex.c : $(UTIL)\lev_comp.l $(MAKEB) YY=lev do_lex # # Targets for the dungeon compiler. # dgn_comp : $(TEMP)\dgn_comp.exe $(TEMP)\dgn_comp.exe : $(TEMP)\dgn_comp.rsp $(DGNCLN) $(TEMP)\dgn_comp.rsp : $(DGNCOMPOBJS) $(TEMP)\$(DGNCDEF) $(ECHO) $(SYSOBJ) $(DOBJ01) +> $@ $(ECHO) $(DOBJ02)>> $@ $(ECHO) $(TEMP)\dgn_comp.exe>> $@ $(ECHO) nul>> $@ $(ECHO) $(RLIBS)>> $@ $(ECHO) $(DGNCMD) $(LFLAGS);>> $@ $(OBJ)\dgn_yacc.o : $(UTIL)\$(CB) $(CONFIG_H) $(INCL)\date.h $(INCL)\dgn_file.h $(UTILCC) $(OBJ)\dgn_lex.o : $(UTIL)\$(CB) $(CONFIG_H) $(INCL)\dgn_comp.h $(INCL)\dgn_file.h $(UTILCC) $(OBJ)\dgn_main.o : $(UTIL)\$(CB) $(CONFIG_H) $(UTILCC) $(UTIL)\dgn_yacc.c : $(UTIL)\dgn_comp.y $(MAKEB) YY=dgn do_yacc $(UTIL)\dgn_lex.c : $(UTIL)\dgn_comp.l $(MAKEB) YY=dgn do_lex # # For both lev_comp and dgn_comp. # $(OBJ)\panic.o : $(UTIL)\$(CB) $(CONFIG_H) $(UTILCC) # # Yacc and Lex targets. # yacc_cpy : $(CP) $(SSYS)\$(YY)_yacc.c $(UTIL) $(CP) $(SSYS)\$(YY)_comp.h $(INCL) $(MAKEB) TT=$(UTIL)\$(YY)_yacc.c do_touch $(MAKEB) TT=$(INCL)\$(YY)_comp.h do_touch yacc_msg : $(ECHO) $(YY)_comp.y has changed. To update $(YY)_yacc.c and $(YY)_comp.h run $(YACC). yacc_act : $(YACC) -d $(UTIL)\$(YY)_comp.y $(CP) $(YTABC) $(UTIL)\$(YY)_yacc.c $(CP) $(YTABH) $(INCL)\$(YY)_comp.h $(RM) $(YTABC) $(RM) $(YTABH) lex_cpy : $(CP) $(SSYS)\$(YY)_lex.c $(UTIL) $(MAKEB) TT=$(UTIL)\$(YY)_lex.c do_touch lex_msg : $(ECHO) $(YY)_comp.l has changed. To update $(YY)_lex.c run $(LEX). lex_act : $(LEX) $(UTIL)\$(YY)_comp.l $(CP) $(LEXYYC) $(UTIL)\$(YY)_lex.c $(RM) $(LEXYYC) # # Why must this be so kludgy? # realtouch : $(TOUCH) $(TT) faketouch : $(B) $(CAT) $(TT) > $(TEMP)\foo.bar $(S) $(CP) $(TEMP)\foo.bar $(TT) $(S) $(RM) $(TEMP)\foo.bar $(E) # # Targets for the recovery utility. # recover : $(GAMEDIR)\recover.exe $(GAMEDIR)\recover.exe : $(TEMP)\recover.rsp $(RCVRLN) $(TEMP)\recover.rsp : $(RECOVOBJS) $(TEMP)\$(RCVRDEF) $(ECHO) $(SYSOBJ) $(RECOVOBJS)> $@ $(ECHO) $(GAMEDIR)\recover.exe>> $@ $(ECHO) nul>> $@ $(ECHO) $(PLIBS)>> $@ $(ECHO) $(TEMP)\$(RCVRDEF) $(LFLAGS);>> $@ $(OBJ)\recover.o : $(UTIL)\$(CB) $(CONFIG_H) $(UTILCC) # # Targets for the dlb. # dlb : $(TEMP)\dlb.exe $(TEMP)\dlb.exe : $(TEMP)\dlb.rsp $(RCVRLN) $(TEMP)\dlb.rsp : $(DLBOBJS) $(TEMP)\$(DLBDEF) $(ECHO) $(SYSOBJ) $(DLBOBJS)> $@ $(ECHO) $(TEMP)\dlb.exe>> $@ $(ECHO) nul>> $@ $(ECHO) $(PLIBS)>> $@ $(ECHO) $(TEMP)\$(DLBDEF) $(LFLAGS);>> $@ $(OBJ)\dlb_main.o : $(UTIL)\$(CB) $(CONFIG_H) $(INCL)\dlb.h $(UTILCC) $(GAMEDIR)\nhdat : $(MAKEB) do_dlb dlb_yup : dlb $(TEMP)\dlb cf $(GAMEDIR)\nhdat $(DATDLB) -$(RM) $(GAMEDIR)\help -$(RM) $(GAMEDIR)\hh -$(RM) $(GAMEDIR)\cmdhelp -$(RM) $(GAMEDIR)\history -$(RM) $(GAMEDIR)\opthelp -$(RM) $(GAMEDIR)\wizhelp -$(RM) $(GAMEDIR)\asmodeus.lev -$(RM) $(GAMEDIR)\baalz.lev -$(RM) $(GAMEDIR)\bigrm-?.lev -$(RM) $(GAMEDIR)\castle.lev -$(RM) $(GAMEDIR)\fakewiz?.lev -$(RM) $(GAMEDIR)\juiblex.lev -$(RM) $(GAMEDIR)\knox.lev -$(RM) $(GAMEDIR)\medusa-?.lev -$(RM) $(GAMEDIR)\minend-?.lev -$(RM) $(GAMEDIR)\minefill.lev -$(RM) $(GAMEDIR)\minetn-?.lev -$(RM) $(GAMEDIR)\oracle.lev -$(RM) $(GAMEDIR)\orcus.lev -$(RM) $(GAMEDIR)\sanctum.lev -$(RM) $(GAMEDIR)\tower?.lev -$(RM) $(GAMEDIR)\valley.lev -$(RM) $(GAMEDIR)\wizard?.lev -$(RM) $(GAMEDIR)\astral.lev -$(RM) $(GAMEDIR)\air.lev -$(RM) $(GAMEDIR)\earth.lev -$(RM) $(GAMEDIR)\fire.lev -$(RM) $(GAMEDIR)\water.lev -$(RM) $(GAMEDIR)\???-goal.lev -$(RM) $(GAMEDIR)\???-fil?.lev -$(RM) $(GAMEDIR)\???-loca.lev -$(RM) $(GAMEDIR)\???-strt.lev -$(RM) $(GAMEDIR)\data -$(RM) $(GAMEDIR)\oracles -$(RM) $(GAMEDIR)\options -$(RM) $(GAMEDIR)\quest.dat -$(RM) $(GAMEDIR)\rumors dlb_nope : $(ECHO) DLB not requested. # # The following files depend on makedefs to be created. # # date.h should be remade every time any of the source or include # files is modified. # $(INCL)\date.h : $(VOBJ) $(TEMP)\makedefs.exe $(TEMP)\makedefs -v $(CP) $(DAT)\options $(GAMEDIR) $(RM) $(DAT)\options $(INCL)\onames.h : $(TEMP)\makedefs.exe $(TEMP)\makedefs -o $(INCL)\pm.h : $(TEMP)\makedefs.exe $(TEMP)\makedefs -p monstr.c : $(TEMP)\makedefs.exe $(TEMP)\makedefs -m $(OBJ)\monstr.o : $(CB) $(SRCCC) $(GAMEDIR)\data : $(DAT)\$(DATABASE) $(TEMP)\makedefs.exe $(TEMP)\makedefs -d $(CP) $(DAT)\data $(GAMEDIR) $(RM) $(DAT)\data $(GAMEDIR)\rumors : $(DAT)\rumors.tru $(DAT)\rumors.fal $(TEMP)\makedefs.exe $(TEMP)\makedefs -r $(CP) $(DAT)\rumors $(GAMEDIR) $(RM) $(DAT)\rumors $(GAMEDIR)\oracles : $(DAT)\oracles.txt $(TEMP)\makedefs.exe $(TEMP)\makedefs -h $(CP) $(DAT)\oracles $(GAMEDIR) $(RM) $(DAT)\oracles $(GAMEDIR)\quest.dat : $(DAT)\quest.txt $(TEMP)\makedefs.exe $(TEMP)\makedefs -q $(CP) $(DAT)\quest.dat $(GAMEDIR) $(RM) $(DAT)\quest.dat # # Vision tables for algorithm D. # vis_tab.c : $(INCL)\vis_tab.h $(INCL)\vis_tab.h : $(TEMP)\makedefs.exe $(TEMP)\makedefs -z $(OBJ)\vis_tab.o : $(CB) $(SRCCC) # # The following programs vary depending on what OS you are using. # $(OBJ)\main.o : $(SSYS)\pc$(CB) $(HACK_H) $(INCL)\dlb.h $(PSYSCC) $(OBJ)\tty.o : $(SSYS)\pc$(CB) $(HACK_H) $(INCL)\func_tab.h $(PSYSCC) $(OBJ)\unix.o : $(SSYS)\pc$(CB) $(HACK_H) $(PSYSCC) # # Other system specific modules. # $(OBJ)\os2.o : $(SYS)\$(CB) $(HACK_H) $(INCL)\tcap.h $(INCL)\def_os2.h $(SYSCC) $(OBJ)\pcsys.o : $(SSYS)\$(CB) $(HACK_H) $(SSYSCC) # # Berkeley random(3) routines. # $(OBJ)\random.o : $(SSYS)\$(CB) $(SSYSCC) # # Window source. # $(OBJ)\getline.o : $(WIN)\$(CB) $(HACK_H) $(INCL)\func_tab.h $(WINCC) $(OBJ)\termcap.o : $(WIN)\$(CB) $(HACK_H) $(INCL)\tcap.h $(WINCC) $(OBJ)\topl.o : $(WIN)\$(CB) $(HACK_H) $(INCL)\tcap.h $(WINCC) $(OBJ)\wintty.o : $(WIN)\$(CB) $(HACK_H) $(INCL)\tcap.h $(WINCC) # # Secondary targets. # dat : spec_lev help_fil $(GAMEDIR)\dungeon $(GAMEDIR)\data $(GAMEDIR)\rumors \ $(GAMEDIR)\oracles $(GAMEDIR)\quest.dat $(GAMEDIR)\$(GAME).ico \ $(GAMEDIR)\$(GAME).cmd $(GAMEDIR)\nethack.cnf $(GAMEDIR)\nhdat help_fil : $(GAMEDIR)\cmdhelp $(GAMEDIR)\help $(GAMEDIR)\hh $(GAMEDIR)\history \ $(GAMEDIR)\license $(GAMEDIR)\opthelp $(GAMEDIR)\wizhelp $(GAMEDIR)\cmdhelp : $(DAT)\cmdhelp $(CP) $(DAT)\cmdhelp $(GAMEDIR) $(GAMEDIR)\help : $(DAT)\help $(CP) $(DAT)\help $(GAMEDIR) $(GAMEDIR)\hh : $(DAT)\hh $(CP) $(DAT)\hh $(GAMEDIR) $(GAMEDIR)\history : $(DAT)\history $(CP) $(DAT)\history $(GAMEDIR) $(GAMEDIR)\license : $(DAT)\license $(CP) $(DAT)\license $(GAMEDIR) $(GAMEDIR)\opthelp : $(DAT)\opthelp $(CP) $(DAT)\opthelp $(GAMEDIR) $(GAMEDIR)\wizhelp : $(DAT)\wizhelp $(CP) $(DAT)\wizhelp $(GAMEDIR) $(GAMEDIR)\dungeon : $(DAT)\dungeon.def $(TEMP)\makedefs.exe $(TEMP)\dgn_comp.exe $(TEMP)\makedefs -e $(TEMP)\dgn_comp $(DAT)\dungeon.pdf $(CP) $(DAT)\dungeon $(GAMEDIR) $(RM) $(DAT)\dungeon.pdf $(RM) $(DAT)\dungeon AFILES = $(GAMEDIR)\Arc-goal.lev BFILES = $(GAMEDIR)\Bar-goal.lev CFILES = $(GAMEDIR)\Cav-goal.lev HFILES = $(GAMEDIR)\Hea-goal.lev KFILES = $(GAMEDIR)\Kni-goal.lev MFILES = $(GAMEDIR)\Mon-goal.lev PFILES = $(GAMEDIR)\Pri-goal.lev RANFILES = $(GAMEDIR)\Ran-goal.lev RFILES = $(GAMEDIR)\Rog-goal.lev SFILES = $(GAMEDIR)\Sam-goal.lev TFILES = $(GAMEDIR)\Tou-goal.lev VFILES = $(GAMEDIR)\Val-goal.lev WFILES = $(GAMEDIR)\Wiz-goal.lev XFILES = $(AFILES) $(BFILES) $(CFILES) $(HFILES) $(KFILES) $(MFILES) \ $(PFILES) $(RANFILES) $(RFILES) $(SFILES) $(TFILES) $(VFILES) $(WFILES) spec_lev : $(GAMEDIR)\astral.lev $(GAMEDIR)\bigrm-1.lev $(GAMEDIR)\castle.lev \ $(GAMEDIR)\knox.lev $(GAMEDIR)\medusa-1.lev $(GAMEDIR)\minefill.lev \ $(GAMEDIR)\oracle.lev $(GAMEDIR)\tower1.lev $(GAMEDIR)\valley.lev \ $(GAMEDIR)\wizard1.lev $(GAMEDIR)\soko1-1.lev $(XFILES) # Single special level files $(GAMEDIR)\castle.lev : $(DAT)\castle.des $(TEMP)\lev_comp.exe $(MAKEB) LF=castle do_slev $(GAMEDIR)\knox.lev : $(DAT)\knox.des $(TEMP)\lev_comp.exe $(MAKEB) LF=knox do_slev $(GAMEDIR)\oracle.lev : $(DAT)\oracle.des $(TEMP)\lev_comp.exe $(MAKEB) LF=oracle do_slev do_slev : $(TEMP)\lev_comp $(DAT)\$(LF).des $(CP) $(LF).lev $(GAMEDIR) $(RM) $(LF).lev # Multiple special level files $(GAMEDIR)\astral.lev : $(DAT)\endgame.des $(TEMP)\lev_comp.exe $(TEMP)\lev_comp $(DAT)\endgame.des $(CP) air.lev $(GAMEDIR) $(CP) astral.lev $(GAMEDIR) $(CP) earth.lev $(GAMEDIR) $(CP) fire.lev $(GAMEDIR) $(CP) water.lev $(GAMEDIR) $(RM) air.lev $(RM) astral.lev $(RM) earth.lev $(RM) fire.lev $(RM) water.lev $(GAMEDIR)\bigrm-1.lev : $(DAT)\bigroom.des $(TEMP)\lev_comp.exe $(TEMP)\lev_comp $(DAT)\bigroom.des $(CP) bigrm-?.lev $(GAMEDIR) $(RM) bigrm-?.lev $(GAMEDIR)\medusa-1.lev : $(DAT)\medusa.des $(TEMP)\lev_comp.exe $(TEMP)\lev_comp $(DAT)\medusa.des $(CP) medusa-?.lev $(GAMEDIR) $(RM) medusa-?.lev $(GAMEDIR)\minefill.lev : $(DAT)\mines.des $(TEMP)\lev_comp.exe $(TEMP)\lev_comp $(DAT)\mines.des $(CP) minend-?.lev $(GAMEDIR) $(CP) minefill.lev $(GAMEDIR) $(CP) minetn-?.lev $(GAMEDIR) $(RM) minend-?.lev $(RM) minefill.lev $(RM) minetn-?.lev $(GAMEDIR)\tower1.lev : $(DAT)\tower.des $(TEMP)\lev_comp.exe $(TEMP)\lev_comp $(DAT)\tower.des $(CP) tower?.lev $(GAMEDIR) $(RM) tower?.lev $(GAMEDIR)\valley.lev : $(DAT)\gehennom.des $(TEMP)\lev_comp.exe $(TEMP)\lev_comp $(DAT)\gehennom.des $(CP) asmodeus.lev $(GAMEDIR) $(CP) baalz.lev $(GAMEDIR) $(CP) juiblex.lev $(GAMEDIR) $(CP) orcus.lev $(GAMEDIR) $(CP) sanctum.lev $(GAMEDIR) $(CP) valley.lev $(GAMEDIR) $(RM) asmodeus.lev $(RM) baalz.lev $(RM) juiblex.lev $(RM) orcus.lev $(RM) sanctum.lev $(RM) valley.lev $(GAMEDIR)\wizard1.lev : $(DAT)\yendor.des $(TEMP)\lev_comp.exe $(TEMP)\lev_comp $(DAT)\yendor.des $(CP) wizard?.lev $(GAMEDIR) $(CP) fakewiz?.lev $(GAMEDIR) $(RM) wizard?.lev $(RM) fakewiz?.lev $(GAMEDIR)\soko1-1.lev : $(DAT)\sokoban.des $(TEMP)\lev_comp.exe $(TEMP)\lev_comp $(DAT)\sokoban.des $(CP) soko?-?.lev $(GAMEDIR) $(RM) soko?-?.lev # Quest dungeons $(AFILES) : $(DAT)\Arch.des $(TEMP)\lev_comp.exe $(MAKEB) QQ=Arc QF=Arch do_quest $(BFILES) : $(DAT)\Barb.des $(TEMP)\lev_comp.exe $(MAKEB) QQ=Bar QF=Barb do_quest $(CFILES) : $(DAT)\Caveman.des $(TEMP)\lev_comp.exe $(MAKEB) QQ=Cav QF=Caveman do_quest $(HFILES) : $(DAT)\Healer.des $(TEMP)\lev_comp.exe $(MAKEB) QQ=Hea QF=Healer do_quest $(KFILES) : $(DAT)\Knight.des $(TEMP)\lev_comp.exe $(MAKEB) QQ=Kni QF=Knight do_quest $(MFILES) : $(DAT)\Monk.des $(TEMP)\lev_comp.exe $(MAKEB) QQ=Mon QF=Monk do_quest $(PFILES) : $(DAT)\Priest.des $(TEMP)\lev_comp.exe $(MAKEB) QQ=Pri QF=Priest do_quest $(RANFILES) : $(DAT)\Ranger.des $(TEMP)\lev_comp.exe $(MAKEB) QQ=Ran QF=Ranger do_quest $(RFILES) : $(DAT)\Rogue.des $(TEMP)\lev_comp.exe $(MAKEB) QQ=Rog QF=Rogue do_quest $(SFILES) : $(DAT)\Samurai.des $(TEMP)\lev_comp.exe $(MAKEB) QQ=Sam QF=Samurai do_quest $(TFILES) : $(DAT)\Tourist.des $(TEMP)\lev_comp.exe $(MAKEB) QQ=Tou QF=Tourist do_quest $(VFILES) : $(DAT)\Valkyrie.des $(TEMP)\lev_comp.exe $(MAKEB) QQ=Val QF=Valkyrie do_quest $(WFILES) : $(DAT)\Wizard.des $(TEMP)\lev_comp.exe $(MAKEB) QQ=Wiz QF=Wizard do_quest do_quest : $(TEMP)\lev_comp $(DAT)\$(QF).des $(CP) $(QQ)-fil?.lev $(GAMEDIR) $(CP) $(QQ)-goal.lev $(GAMEDIR) $(CP) $(QQ)-loca.lev $(GAMEDIR) $(CP) $(QQ)-strt.lev $(GAMEDIR) $(RM) $(QQ)-fil?.lev $(RM) $(QQ)-goal.lev $(RM) $(QQ)-loca.lev $(RM) $(QQ)-strt.lev # # NetHack icon for Presentation Manager. # $(GAMEDIR)\$(GAME).ico : $(SYS)\nhpmico.uu $(MAKEB) do_icon icon_msg : $(ECHO) Icon file not extracted. Extract manually if required. icon_act : $(UUDECODE) $(SYS)\nhpmico.uu $(CP) nethack.ico $(GAMEDIR)\$(GAME).ico $(RM) nethack.ico # # NetHack command file to use with Presentation Manager. # $(GAMEDIR)\$(GAME).cmd : $(MAKEB) CMDF=$@ do_cmd cmd_msg : $(ECHO) Command file not created. Create manually if required. cmd_act : $(ECHO) @echo off> $(CMDF) $(ECHO) REM Command file for starting nethack.exe from PM/WPS Desktop>> $(CMDF) $(ECHO) $(GAME).exe $(P)1 $(P)2 $(P)3 $(P)4 $(P)5 $(P)6 $(P)7>> $(CMDF) $(ECHO) pause>> $(CMDF) # # NetHack configuration file. Will not overwrite an existing file. # $(GAMEDIR)\nethack.cnf : $(CP) $(SSYS)\nethack.cnf $(GAMEDIR) # # Documentation. # $(TEMP)\$(GUIDEBOO).dvi : $(DOC)\$(GUIDEBOO).tex $(LATEX) $(DOC)\$(GUIDEBOO).tex $(CP) $(GUIDEBOO).dvi $(TEMP) $(CP) $(GUIDEBOO).aux $(TEMP) $(CP) $(GUIDEBOO).log $(TEMP) $(RM) $(GUIDEBOO).dvi $(RM) $(GUIDEBOO).aux $(RM) $(GUIDEBOO).log # # Housekeeping. # clean : -$(RM) $(OBJ)\*.o spotless : clean -$(RM) $(INCL)\date.h -$(RM) $(INCL)\onames.h -$(RM) $(INCL)\pm.h -$(RM) $(INCL)\vis_tab.h -$(RM) vis_tab.c -$(RM) monstr.c -$(RM) *.lev -$(RM) nethack.ico -$(RM) $(TEMP)\makedefs.exe -$(RM) $(TEMP)\lev_comp.exe -$(RM) $(TEMP)\dgn_comp.exe -$(RM) $(TEMP)\*.rsp -$(RM) $(TEMP)\*.def -$(RM) $(TEMP)\*.map -$(RM) $(TEMP)\$(GUIDEBOO).dvi -$(RM) $(TEMP)\$(GUIDEBOO).aux -$(RM) $(TEMP)\$(GUIDEBOO).log # # Main source. # # Default rules are sooo difficult for so many make # programs that we do this the most straightforward way. # $(OBJ)\allmain.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\alloc.o : $(SRC)\$(CB) $(CONFIG_H) $(SRCCC) $(OBJ)\apply.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\edog.h $(SRCCC) $(OBJ)\artifact.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\artifact.h $(INCL)\artilist.h $(SRCCC) $(OBJ)\attrib.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\artifact.h $(SRCCC) $(OBJ)\ball.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\bones.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\lev.h $(SRCCC) $(OBJ)\botl.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\cmd.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\func_tab.h $(SRCCC) $(OBJ)\dbridge.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\decl.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\quest.h $(SRCCC) $(OBJ)\detect.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\artifact.h $(SRCCC) $(OBJ)\dig.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\display.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\dlb.o : $(SRC)\$(CB) $(CONFIG_H) $(INCL)\dlb.h $(SRCCC) $(OBJ)\do.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\lev.h $(SRCCC) $(OBJ)\do_name.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\do_wear.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\dog.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\edog.h $(SRCCC) $(OBJ)\dogmove.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\mfndpos.h $(INCL)\edog.h $(SRCCC) $(OBJ)\dokick.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\eshk.h $(SRCCC) $(OBJ)\dothrow.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\drawing.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\tcap.h $(SRCCC) $(OBJ)\dungeon.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\dgn_file.h $(SRCCC) $(OBJ)\eat.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\end.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\eshk.h $(SRCCC) $(OBJ)\engrave.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\lev.h $(SRCCC) $(OBJ)\exper.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\explode.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\extralev.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\files.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\fountain.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\hack.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\hacklib.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\invent.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\artifact.h $(SRCCC) $(OBJ)\light.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\lock.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\mail.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\mail.h $(SRCCC) $(OBJ)\makemon.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\epri.h $(INCL)\emin.h $(SRCCC) $(OBJ)\mcastu.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\mhitm.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\artifact.h $(INCL)\edog.h $(SRCCC) $(OBJ)\mhitu.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\artifact.h $(INCL)\edog.h $(SRCCC) $(OBJ)\minion.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\emin.h $(INCL)\epri.h $(SRCCC) $(OBJ)\mklev.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\mkmap.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\sp_lev.h $(SRCCC) $(OBJ)\mkmaze.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\sp_lev.h $(SRCCC) $(OBJ)\mkobj.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\artifact.h $(SRCCC) $(OBJ)\mkroom.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\mon.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\mfndpos.h $(INCL)\edog.h $(SRCCC) $(OBJ)\mondata.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\eshk.h $(INCL)\epri.h $(SRCCC) $(OBJ)\monmove.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\mfndpos.h $(INCL)\artifact.h $(SRCCC) $(OBJ)\monst.o : $(SRC)\$(CB) $(CONFIG_H) $(PERMONST_H) $(INCL)\monsym.h $(INCL)\eshk.h $(INCL)\vault.h $(INCL)\epri.h $(INCL)\color.h $(SRCCC) $(OBJ)\mplayer.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\mthrowu.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\muse.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\edog.h $(SRCCC) $(OBJ)\music.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\o_init.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\objects.o : $(SRC)\$(CB) $(CONFIG_H) $(INCL)\obj.h $(INCL)\objclass.h $(INCL)\prop.h $(INCL)\color.h $(SRCCC) $(OBJ)\objnam.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\options.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\tcap.h $(SRCCC) $(OBJ)\pager.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\pickup.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\pline.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\epri.h $(SRCCC) $(OBJ)\polyself.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\potion.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\pray.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\epri.h $(SRCCC) $(OBJ)\priest.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\mfndpos.h $(INCL)\eshk.h $(INCL)\epri.h $(INCL)\emin.h $(SRCCC) $(OBJ)\quest.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\quest.h $(INCL)\qtext.h $(SRCCC) $(OBJ)\questpgr.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\qtext.h $(SRCCC) $(OBJ)\read.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\region.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\rect.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\restore.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\lev.h $(INCL)\tcap.h $(INCL)\quest.h $(SRCCC) $(OBJ)\rip.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\rnd.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\role.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\rumors.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\save.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\lev.h $(INCL)\quest.h $(SRCCC) $(OBJ)\shk.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\eshk.h $(SRCCC) $(OBJ)\shknam.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\eshk.h $(SRCCC) $(OBJ)\sit.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\artifact.h $(SRCCC) $(OBJ)\sounds.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\edog.h $(INCL)\eshk.h $(SRCCC) $(OBJ)\sp_lev.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\sp_lev.h $(INCL)\rect.h $(SRCCC) $(OBJ)\spell.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\steal.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\steed.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\teleport.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\timeout.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\topten.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\track.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\trap.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\u_init.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\uhitm.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\vault.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\vault.h $(SRCCC) $(OBJ)\version.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\date.h $(INCL)\$(PATCHLEV).h $(SRCCC) $(OBJ)\vision.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\vis_tab.h $(SRCCC) $(OBJ)\weapon.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\were.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\wield.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\windows.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\wizard.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\qtext.h $(SRCCC) $(OBJ)\worm.o : $(SRC)\$(CB) $(HACK_H) $(INCL)\lev.h $(SRCCC) $(OBJ)\worn.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\write.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC) $(OBJ)\zap.o : $(SRC)\$(CB) $(HACK_H) $(SRCCC)