# SCCS Id: @(#)MakeMSC.src	3.1	93/07/11
# Copyright (c) NetHack PC Development Team 1992, 1993
# PC NetHack 3.1 Makefile for Microsoft(tm) "C" >= 6.0ax and MSVC >= 1.0
#
# Nota Bene:	Before you get to here you should have already read
# 		the Install.dos file located in the sys/msdos directory.

# This Makefile supports two different overlay management schemes.
# You must select either the one that supports Microsoft C
# version 6, or the one that supports Microsoft C version 7 and 
# Microsoft Visual C++ Professional version 1 (MSVC).  By default this 
# Makefile is set up for version 7 or greater (including MSVC).  Certain 
# sections particular to each compiler are marked either MSC7/MSVC or MSC6.
# If you are using Microsoft C version 7 or MSVC, make sure that all the MSC6
# sections are commented out and pay particular attention
# to all sections marked MSC7/MSVC, uncommenting all the variables.
# Do the same thing for MSC6 if you are using that version of
# the compiler.
#
# MSC6 Notes:
#	As it is set up, this makefile requires that exesmurf (the
#	NetHack overlay-aware .exe header editor) be on your path or in the
#	$(SRC) directory. If you wish to change the path or use Microsoft
#	EXEMOD instead, see the symbols EXEPATCH and EXEFLAGS.
#

#
# Game Installation Variables.
# NOTE: Make sure GAMEDIR exists before make is started.
#

GAME	= NetHack
GAMEDIR = c:\games\nethack
default: $(GAME)

#
#	Source code and data file directories.
#

DAT	= ..\dat
INCL	= ..\include
SRC	= .
OBJ	= $(SRC)\o
SYS	= ..\sys\msdos
SSYS	= ..\sys\share
UTL	= ..\util
WIN	= ..\win\tty

#
#	Exe File Info.
#	($(MAKE) macro is often predefined, so we use $(MAKEBIN) instead.)
#

ASM	= masm		# Assembler
CC	= cl		# Compiler
LINK	= link		# Linker
MAKEBIN = make45l	# Make Utility

#
# Make the necessary changes in *one* of the two sections below.
#


#### MSC7/MSVC Section Only #####
# MSC7 and MSVC Compiler Flags are set up in the setup.bat file using
# the CL environment variable as the total lenth of the compiler
# command line exceeds the MSDOS 128 character limit.
#
CFLAGS	= /c
LFLAGS	= /noi /seg:512 /map /st:5120 /DYNAMIC:1052 /INFO
OVLMUCKING =	# None required
MSC6MUCK =	# None required
OVERLAY =	# None required
OVERLAY_H =	# None required
############################


#### MSC6 Section Only #####
#
# First comment out the MSC7/MSVC section.  And uncomment much of what is below.
#

#
# CC	There was a register bug, to be safe remove stack probes.
# /Gt18 is currently about the largest value that keeps the initialised
#	data segment below 64K (and keeps the linker happy).
# /G2	286 or higher machines can use the /G2 CFLAG option for better
#	performance.
#
#CFLAGS	= /AL /c /Os /Gs /Gt18 /Zp1 /W0 /I$(INCL)
#LFLAGS	= /noi /seg:512 /map /st:4096
#EXEPATCH = exesmurf	# Executable Massager
#EXEFLAGS = /max4500 /min4500
#OVLMUCKING = $(EXEPATCH) $(OBJ)\ovlmgr.obj
#MSC6MUCK = msc6muck

#
# For Microsoft C version <= 6.00ax, we use a custom overlay
# manager.
#
# Switch the following $(OBJ)\$(OVLMGR): lines if you don't have a
# MASM compatible assembler.
#$(OBJ)\ovlmgr.obj: $(SYS)\ovlmgr.asm
#	$(ASM) $(AFLAGS) $(SYS)\ovlmgr.asm, $@ ;
$(OBJ)\ovlmgr.obj: ; copy $(SYS)\ovlmgr.obj $(OBJ)\ovlmgr.obj

#
# Object files and a header file required for trampoli overlay system.
#
#OVERLAY = $(OBJ)\ovlmgr.obj $(OBJ)\trampoli.o
#OVERLAY_H = $(INCL)\trampoli.h

#
# If you need to recompile ovlmgr.asm you may want to change
# some of the flags.
AFLAGS = /MX
# /Di386	= Use 386 specific enhancements
# /DNOEMS	= Do not use EMS memory
# /DDEBUG	= Report memory usage on startup
# /DNOSPLIT	= EXE file is not split out to OVL files

#
# Uncomment these sections.
#
#$(EXEPATCH): $(EXEPATCH).exe
#$(EXEPATCH).exe: $(OBJ)\$(EXEPATCH).o
#	$(LINK) $(OBJ)\$*.o, $*.exe;

############################

#
#	Optional high-quality BSD random number generation routines
#	(see pcconf.h).	Set to nothing if not used.
#

RANDOM	= $(OBJ)\random.o
# RANDOM	=

#
# If TERMLIB is #defined in the source (in include\pcconf.h), 
# comment out the upper line and uncomment the lower.  Make sure 
# that TERMLIB contains the full pathname to the termcap library. 

TERMLIB =
#TERMLIB = $(SSYS)\termcap.lib

#
#	Nothing below this line should have to be changed.
#

#
#	Make Roolz dude.
#	Due to an NDMake inadequacy these must accord with a topological
#	sort of the generated-from relation... output on the left, input
#	on the right. Trust me.
#

.SUFFIXES: .exe .0 .0-1 .0-2 .0-3 .1 .1-2 .1-3 .1-b .2 .2-3 .2-b .3 .3-b .b \
	   .o .c .y .l .obj .asm

.c.o:
	$(CC) $(CFLAGS) /Fo$@ $<
.c.0:
	$(CC) $(CFLAGS) /DOVL0 /NT$(@F) /Fo$@ $<
.c.0-1:
	$(CC) $(CFLAGS) /DOVL0 /DOVL1 /NT$(@F) /Fo$@ $<
.c.0-2:
	$(CC) $(CFLAGS) /DOVL0 /DOVL1 /DOVL2 /NT$(@F) /Fo$@ $<
.c.0-3:
	$(CC) $(CFLAGS) /DOVL0 /DOVL1 /DOVL2 /DOVL3 /NT$(@F) /Fo$@ $<
.c.1:
	$(CC) $(CFLAGS) /DOVL1 /NT$(@F) /Fo$@ $<
.c.1-2:
	$(CC) $(CFLAGS) /DOVL1 /DOVL2 /NT$(@F) /Fo$@ $<
.c.1-3:
	$(CC) $(CFLAGS) /DOVL1 /DOVL2 /DOVL3 /NT$(@F) /Fo$@ $<
.c.1-b:
	$(CC) $(CFLAGS) /DOVL1 /DOVL2 /DOVL3 /DOVLB /NT$(@F) /Fo$@ $<
.c.2:
	$(CC) $(CFLAGS) /DOVL2 /NT$(@F) /Fo$@ $<
.c.2-3:
	$(CC) $(CFLAGS) /DOVL2 /DOVL3 /NT$(@F) /Fo$@ $<
.c.2-b:
	$(CC) $(CFLAGS) /DOVL2 /DOVL3 /DOVLB /NT$(@F) /Fo$@ $<
.c.3:
	$(CC) $(CFLAGS) /DOVL3 /NT$(@F) /Fo$@ $<
.c.3-b:
	$(CC) $(CFLAGS) /DOVL3 /DOVLB /NT$(@F) /Fo$@ $<
.c.b:
	$(CC) $(CFLAGS) /DOVLB /NT$(@F) /Fo$@ $<
.asm.obj:
	$(ASM) $(AFLAGS) $<, $@ ;

#
#	Header Objects.
#

CONFIG_H   = $(GLOBAL_H)	$(INCL)\tradstdc.h	$(INCL)\config.h
DECL_H	   = $(YOU_H)		$(INCL)\spell.h		$(INCL)\color.h	\
	     $(INCL)\obj.h	$(INCL)\onames.h	$(INCL)\pm.h \
	     $(INCL)\decl.h
DGN_FILE_H = $(INCL)\align.h	$(INCL)\dgn_file.h
DISPLAY_H  = $(MONDATA_H)	$(INCL)\vision.h	$(INCL)\display.h
DUNGEON_H  = $(INCL)\align.h	$(INCL)\dungeon.h
EMIN_H	   = $(DUNGEON_H)	$(INCL)\emin.h
EPRI_H	   = $(DUNGEON_H)	$(INCL)\align.h		$(INCL)\epri.h
ESHK_H	   = $(DUNGEON_H)	$(INCL)\eshk.h
GLOBAL_H   = $(PCCONF_H)	$(INCL)\coord.h		$(INCL)\global.h
HACK_H	   = $(CONFIG_H)	$(DUNGEON_H)		$(DECL_H) \
	     $(DISPLAY_H)	$(INCL)\monsym.h	$(INCL)\mkroom.h \
	     $(INCL)\objclass.h	$(INCL)\trap.h		$(INCL)\flag.h	\
	     $(RM_H)		$(INCL)\vision.h	$(INCL)\wintype.h \
	     $(INCL)\engrave.h	$(INCL)\rect.h \
	     $(INCL)\trampoli.h	$(INCL)\hack.h
MONDATA_H  = $(INCL)\align.h	$(INCL)\mondata.h
MONST_H	   = $(INCL)\align.h	$(INCL)\monst.h
PCCONF_H   = $(INCL)\micro.h	$(INCL)\system.h	$(INCL)\pcconf.h
PERMONST_H = $(INCL)\monattk.h	$(INCL)\monflag.h	$(INCL)\align.h	\
	     $(INCL)\permonst.h
RM_H	   = $(INCL)\align.h	$(INCL)\rm.h
SP_LEV_H   = $(INCL)\align.h	$(INCL)\sp_lev.h
VAULT_H	   = $(DUNGEON_H)	$(INCL)\vault.h
YOU_H	   = $(MONST_H)		$(YOUPROP_H)		$(INCL)\align.h	\
	     $(INCL)\attrib.h	$(INCL)\you.h
YOUPROP_H  = $(PERMONST_H)	$(MONDATA_H)		$(INCL)\prop.h	\
	     $(INCL)\pm.h	$(INCL)\youprop.h

#
#	Overlay Objects.
#

ROOT =	$(OVERLAY) $(OBJ)\main.o $(OBJ)\msdos.0 $(OBJ)\dungeon.0 \
	$(OBJ)\alloc.o $(OBJ)\random.o $(OBJ)\decl.o $(OBJ)\dbridge.0 \
	$(OBJ)\objects.o $(OBJ)\invent.0 $(OBJ)\mkobj.0 $(OBJ)\mkroom.0 \
	$(OBJ)\rnd.0 $(OBJ)\video.0 $(OBJ)\mondata.0 $(OBJ)\muse.o \
	$(OBJ)\engrave.0 $(OBJ)\explode.o $(OBJ)\display.o $(OBJ)\vision.o \
	$(OBJ)\attrib.0 $(OBJ)\rect.o $(OBJ)\vis_tab.o $(OBJ)\hacklib.0 \
	$(OBJ)\monst.o $(OBJ)\hack.3 $(OBJ)\topl.0 $(OBJ)\trap.0 \
	$(OBJ)\termcap.0 $(OBJ)\wintty.o $(OBJ)\monmove.0 $(OBJ)\dogmove.0

# These could use to go in root, but are in OLV1 to make
# the game loadable in under 512 free ram.
# rhack and friends
OVL01 = $(OBJ)\allmain.0 $(OBJ)\artifact.0 $(OBJ)\attrib.1 $(OBJ)\cmd.1 \
	$(OBJ)\do.1 $(OBJ)\do.3 $(OBJ)\eat.0 $(OBJ)\engrave.2 \
	$(OBJ)\getline.0-1 $(OBJ)\hack.1-2 \
	$(OBJ)\botl.1 $(OBJ)\sounds.0 $(OBJ)\timeout.0 \
	$(OBJ)\track.1 $(OBJ)\vault.0 $(OBJ)\wizard.0 $(OBJ)\hacklib.1
# startup
OVL02 = $(OBJ)\dungeon.1 $(OBJ)\files.o $(OBJ)\pcsys.o \
	$(OBJ)\monstr.o $(OBJ)\msdos.b
# main monster code
OVL03 = $(OBJ)\cmd.0 $(OBJ)\engrave.1 $(OBJ)\mondata.1 \
	$(OBJ)\mthrowu.0 $(OBJ)\priest.0 $(OBJ)\track.0 \
	$(OBJ)\trap.1 $(OBJ)\were.0
# monster movement
OVL04 = $(OBJ)\mon.0-1 $(OBJ)\monmove.1
# pet monster movement
OVL05 = $(OBJ)\dog.1 $(OBJ)\dogmove.1-b
# advanced monsters
OVL06 = $(OBJ)\minion.o $(OBJ)\mcastu.o
OVL07 = $(OBJ)\priest.1-b $(OBJ)\shk.1-b
OVL08 = $(OBJ)\were.1-b
OVL09 = $(OBJ)\wizard.1-b
OVL10 = $(OBJ)\worm.o
# 11-15 around the movement loop
# domove and friends
OVL11 = $(OBJ)\hack.0 $(OBJ)\apply.0 $(OBJ)\do_wear.1 $(OBJ)\lock.0 \
	$(OBJ)\cmd.2
OVL12 = $(OBJ)\detect.o
OVL13 = $(OBJ)\attrib.2-b $(OBJ)\exper.o
OVL14 = $(OBJ)\eat.1 $(OBJ)\invent.1
OVL15 = $(OBJ)\makemon.0-2 $(OBJ)\mkobj.1
OVL16 = $(OBJ)\makemon.b $(OBJ)\mplayer.o $(OBJ)\mkobj.2-b
OVL17 = $(OBJ)\mhitm.1-b
OVL18 = $(OBJ)\mthrowu.1
OVL19 = $(OBJ)\mthrowu.2-b
OVL20 = $(OBJ)\allmain.1 $(OBJ)\mhitm.0 $(OBJ)\mhitu.0-1 $(OBJ)\rnd.1 \
	$(OBJ)\weapon.0-1
OVL21 = $(OBJ)\mon.2-b
OVL22 = $(OBJ)\artifact.1 $(OBJ)\uhitm.o $(OBJ)\weapon.2-b
OVL23 = $(OBJ)\do_wear.0 $(OBJ)\mhitu.2-b
OVL24 = $(OBJ)\steal.0-1
OVL25 = $(OBJ)\monmove.2-b $(OBJ)\steal.2-b
OVL26 = $(OBJ)\rnd.2-b
OVL27 = $(OBJ)\do_wear.2 $(OBJ)\mondata.2 $(OBJ)\objnam.0-1 \
	$(OBJ)\polyself.0-1
OVL28 = $(OBJ)\do_name.0
OVL29 = $(OBJ)\objnam.2-b $(OBJ)\hacklib.2-b
OVL30 = $(OBJ)\pager.o
OVL31 = $(OBJ)\botl.0
OVL32 = $(OBJ)\botl.b $(OBJ)\topl.b $(OBJ)\termcap.1 $(OBJ)\windows.o \
	$(OBJ)\video.1
OVL33 = $(OBJ)\topl.1-2
OVL34 = $(OBJ)\pline.o
OVL35 = $(OBJ)\termcap.2-b $(OBJ)\video.2-b
OVL36 = $(OBJ)\quest.o $(OBJ)\questpgr.o
OVL37 = $(OBJ)\invent.b
OVL38 = $(OBJ)\hack.b
OVL39 = $(OBJ)\mondata.b $(OBJ)\timeout.1-b $(OBJ)\dog.b $(OBJ)\sounds.1-b
OVL40 = $(OBJ)\do.0 $(OBJ)\invent.3
OVL41 = $(OBJ)\cmd.b $(OBJ)\getline.2 $(OBJ)\write.o
OVL42 = $(OBJ)\apply.2-b
OVL43 = $(OBJ)\do.b $(OBJ)\drawing.o
OVL44 = $(OBJ)\dokick.o
OVL45 = $(OBJ)\dothrow.o
OVL46 = $(OBJ)\eat.2-b
OVL47 = $(OBJ)\invent.2 $(OBJ)\pickup.o
OVL48 = $(OBJ)\lock.1-b
OVL49 = $(OBJ)\polyself.2-b
OVL50 = $(OBJ)\potion.o
OVL51 = $(OBJ)\pray.o
OVL52 = $(OBJ)\read.1-b $(OBJ)\spell.o
OVL53 = $(OBJ)\ball.o
# clothing stuff
OVL54 = $(OBJ)\do_wear.b $(OBJ)\wield.o $(OBJ)\worn.o
# Zappage
OVL55 = $(OBJ)\zap.o
OVL56 = $(OBJ)\dbridge.1-b
OVL57 = $(OBJ)\trap.b
# Unusual circumstances
OVL58 = $(OBJ)\artifact.b $(OBJ)\do_name.1-b $(OBJ)\fountain.o $(OBJ)\music.o \
	$(OBJ)\rumors.o $(OBJ)\sit.o $(OBJ)\vault.1-b
# Uppers and Downers
OVL59 = $(OBJ)\apply.1 $(OBJ)\bones.o $(OBJ)\mklev.o
OVL60 = $(OBJ)\save.o $(OBJ)\restore.o
OVL61 = $(OBJ)\mkmaze.o $(OBJ)\mkroom.1-b $(OBJ)\mkmap.o
# Note: version.o is in OVL62, but in a special way.  See below.
OVL62 = $(OBJ)\allmain.2-b $(OBJ)\end.o $(OBJ)\engrave.b \
	$(OBJ)\o_init.o $(OBJ)\options.o $(OBJ)\rip.o \
	$(OBJ)\shknam.o $(OBJ)\topten.o $(OBJ)\tty.o \
	$(OBJ)\u_init.o $(OBJ)\unix.1-b
# Levelling
OVL63 = $(OBJ)\do.2 $(OBJ)\dog.2 $(OBJ)\extralev.o \
	$(OBJ)\sp_lev.o $(OBJ)\track.2-b

#
#	Make Objects.
#

MOBJ = $(OVL01) $(OVL02) $(OVL03) $(OVL04) $(OVL05) $(OVL06) $(OVL07) $(OVL08)\
       $(OVL09) $(OVL10) $(OVL11) $(OVL12) $(OVL13) $(OVL14) $(OVL15) $(OVL16)\
       $(OVL17) $(OVL18) $(OVL19) $(OVL20) $(OVL21) $(OVL22) $(OVL23) $(OVL24)\
       $(OVL25) $(OVL26) $(OVL27) $(OVL28) $(OVL29) $(OVL30) $(OVL31) $(OVL32)\
       $(OVL33) $(OVL34) $(OVL35) $(OVL36) $(OVL37) $(OVL38) $(OVL39) $(OVL40)\
       $(OVL41) $(OVL42) $(OVL43) $(OVL44) $(OVL45) $(OVL46) $(OVL47) $(OVL48)\
       $(OVL49) $(OVL50) $(OVL51) $(OVL52) $(OVL53) $(OVL54) $(OVL55) $(OVL56)\
       $(OVL57) $(OVL58) $(OVL59) $(OVL60) $(OVL61) $(OVL62) $(OVL63)

VOBJ = $(ROOT)	$(MOBJ)

HOBJ = $(VOBJ)	$(OBJ)\version.o

OVERLAYS = ($(OVL01)) ($(OVL02)) ($(OVL03)) ($(OVL04)) ($(OVL05)) ($(OVL06)) \
	   ($(OVL07)) ($(OVL08)) ($(OVL09)) ($(OVL10)) ($(OVL11)) ($(OVL12)) \
	   ($(OVL13)) ($(OVL14)) ($(OVL15)) ($(OVL16)) ($(OVL17)) ($(OVL18)) \
	   ($(OVL19)) ($(OVL20)) ($(OVL21)) ($(OVL22)) ($(OVL23)) ($(OVL24)) \
	   ($(OVL25)) ($(OVL26)) ($(OVL27)) ($(OVL28)) ($(OVL29)) ($(OVL30)) \
	   ($(OVL31)) ($(OVL32)) ($(OVL33)) ($(OVL34)) ($(OVL35)) ($(OVL36)) \
	   ($(OVL37)) ($(OVL38)) ($(OVL39)) ($(OVL40)) ($(OVL41)) ($(OVL42)) \
	   ($(OVL43)) ($(OVL44)) ($(OVL45)) ($(OVL46)) ($(OVL47)) ($(OVL48)) \
	   ($(OVL49)) ($(OVL50)) ($(OVL51)) ($(OVL52)) ($(OVL53)) ($(OVL54)) \
	   ($(OVL55)) ($(OVL56)) ($(OVL57)) ($(OVL58)) ($(OVL59)) ($(OVL60)) \
	   ($(OVL61)) ($(OVL62)	$(OBJ)\version.o) ($(OVL63))

#
#	Primary make targets.
#

GAMEFILE = $(GAMEDIR)\$(GAME).exe

all: install

install: $(DAT)\sp_lev.tag	$(GAMEFILE)	$(MSC6MUCK)	install.tag
	@echo Don't forget to check HACKDIR in $(GAMEDIR)\NetHack.cnf.
	@echo Done.

install.tag: $(GAMEFILE) $(MSC6MUCK)
	copy $(SSYS)\termcap		$(GAMEDIR)
	copy $(DAT)\*.?			$(GAMEDIR)
	copy $(DAT)\*.dat		$(GAMEDIR)
	copy $(DAT)\*.lev		$(GAMEDIR)
	copy $(SSYS)\NetHack.cnf	$(GAMEDIR)
	copy $(UTL)\recover.exe		$(GAMEDIR)
	copy $(SYS)\msdos.hlp		$(GAMEDIR)
	del  $(GAMEDIR)\makefile
	echo install done > install.tag

$(GAME): $(GAMEFILE) $(MSC6MUCK)

$(GAME).exe: $(GAMEFILE) $(MSC6MUCK)

$(GAMEFILE): $(UTL)\utility.tag $(OBJ) $(OVLMUCKING) $(HOBJ)
	@echo Loading....
	$(LINK) $(LFLAGS) $(ROOT) $(OVERLAYS),$(GAMEFILE),$(GAME),$(TERMLIB);
	@del $(GAMEDIR)\$(GAME).bak > NUL
	@echo $(GAME) is up to date.

msc6muck:
	$(EXEPATCH) $(GAMEFILE) $(EXEFLAGS)
	$(EXEPATCH) $(GAMEFILE) 1 40

#
#	Secondary Targets.
#

clean:
	del $(OBJ)\*.o
	del $(OBJ)\*.0
	del $(OBJ)\*.0-1
	del $(OBJ)\*.0-2
	del $(OBJ)\*.0-3
	del $(OBJ)\*.1
	del $(OBJ)\*.1-2
	del $(OBJ)\*.1-3
	del $(OBJ)\*.1-b
	del $(OBJ)\*.2
	del $(OBJ)\*.2-3
	del $(OBJ)\*.2-b
	del $(OBJ)\*.3
	del $(OBJ)\*.3-b
	del $(OBJ)\*.b
	del $(OBJ)\*.obj
	rmdir $(OBJ)

spotless: clean
	del *.exe
	del *.bak
	del *.tag
	del *.map
	del *.obj
	del *.lib
	del *.txt

$(OBJ):
	if not exist $(OBJ)\*.* mkdir $(OBJ)

#
# I'm not too fond of using this `attrib .foo` command to stop make,
# but I can't think of any better generic way to do it.
# It works for DOS 3.3, 4.00, & 5.0.
# If you find a better one please feel free to implement it.
#
$(UTL)\utility.tag: monst.c	alloc.c			objects.c \
	$(UTL)\makedefs.c	$(UTL)\panic.c		$(UTL)\recover.c \
	$(UTL)\dgn_main.c	$(UTL)\dgn_comp.l	$(UTL)\dgn_comp.y \
	$(UTL)\lev_main.c	$(UTL)\lev_comp.l	$(UTL)\lev_comp.y \
	$(HACK_H)		$(INCL)\patchlevel.h	$(INCL)\qtext.h
	@echo You must first "$(MAKEBIN) all" in the $(UTL) directory.
	@attrib .foo

$(DAT)\sp_lev.tag: $(UTL)\utility.tag
	@echo You must first "$(MAKEBIN) all" in the $(DAT) directory.
	@attrib .foo

#
# Other dependencies
#

$(INCL)\date.h: $(VOBJ)
	$(UTL)\makedefs -v

#
#	Overlay/PC source code dependencies.
#

#
#	$(SYS) files.
#

$(OBJ)\msdos.0: $(HACK_H) $(INCL)\termcap.h $(SYS)\msdos.c
	$(CC) $(CFLAGS) /DOVL0 /NT$(@F) /Fo$@ $(SYS)\msdos.c

$(OBJ)\msdos.b: $(HACK_H) $(INCL)\termcap.h $(SYS)\msdos.c
	$(CC) $(CFLAGS) /DOVLB /NT$(@F) /Fo$@ $(SYS)\msdos.c

$(OBJ)\trampoli.o: $(HACK_H) $(SYS)\trampoli.c
	$(CC) $(CFLAGS) /Fo$@ $(SYS)\trampoli.c

$(OBJ)\video.0:	$(HACK_H) $(INCL)\wintty.h $(SYS)\video.c
	$(CC) $(CFLAGS) /DOVL0 /NT$(@F) /Fo$@ $(SYS)\video.c

$(OBJ)\video.1: $(HACK_H) $(INCL)\wintty.h $(SYS)\video.c
	$(CC) $(CFLAGS) /DOVL1 /NT$(@F) /Fo$@ $(SYS)\video.c

$(OBJ)\video.2-b: $(HACK_H) $(INCL)\wintty.h $(SYS)\video.c
	$(CC) $(CFLAGS) /DOVL2 /DOVLB /NT$(@F) /Fo$@ $(SYS)\video.c

$(OBJ)\exesmurf.o: $(SYS)\exesmurf.c
	$(CC) $(CFLAGS) /Fo$@ $(SYS)\exesmurf.c

#
#	$(SSYS) files.
#

$(OBJ)\main.o: $(HACK_H)	$(SSYS)\pcmain.c
	$(CC) $(CFLAGS) /Fo$@ $(SSYS)\pcmain.c

$(OBJ)\pcsys.o:	$(HACK_H)	$(INCL)\wintty.h	$(SSYS)\pcsys.c
	$(CC) $(CFLAGS) /Fo$@ $(SSYS)\pcsys.c

$(OBJ)\random.o: $(SSYS)\random.c
	$(CC) $(CFLAGS) /Fo$@ $(SSYS)\random.c

$(OBJ)\tty.o: $(HACK_H)		$(INCL)\wintty.h	$(SSYS)\pctty.c
	$(CC) $(CFLAGS) /Fo$@	$(SSYS)\pctty.c

$(OBJ)\unix.0: $(HACK_H)	$(SSYS)\pcunix.c
	$(CC) $(CFLAGS) /DOVL0 /Fo$@ $(SSYS)\pcunix.c

$(OBJ)\unix.1-b: $(HACK_H)	$(SSYS)\pcunix.c
	$(CC) $(CFLAGS) /DOVL1 /DOVL2 /DOVL3 /DOVLB /Fo$@ $(SSYS)\pcunix.c

#
#	$(WIN) files.
#

$(OBJ)\getline.0-1: $(HACK_H)	$(INCL)\wintty.h	$(INCL)\func_tab.h \
	$(WIN)\getline.c
	$(CC) $(CFLAGS) /DOVL0 /DOVL1 /NT$(@F) /Fo$@ $(WIN)\getline.c

$(OBJ)\getline.2: $(HACK_H)	$(INCL)\wintty.h	$(INCL)\func_tab.h \
	$(WIN)\getline.c
	$(CC) $(CFLAGS) /DOVL2 /NT$(@F) /Fo$@ $(WIN)\getline.c

$(OBJ)\getline.b: $(HACK_H)	$(INCL)\wintty.h	$(INCL)\func_tab.h \
	$(WIN)\getline.c
	$(CC) $(CFLAGS) /DOVLB /NT$(@F) /Fo$@ $(WIN)\getline.c

$(OBJ)\termcap.0: $(HACK_H)	$(INCL)\wintty.h	$(INCL)\termcap.h \
	$(WIN)\termcap.c
	$(CC) $(CFLAGS) /DOVL0 /NT$(@F) /Fo$@ $(WIN)\termcap.c

$(OBJ)\termcap.1: $(HACK_H)	$(INCL)\wintty.h	$(INCL)\termcap.h \
	$(WIN)\termcap.c
	$(CC) $(CFLAGS) /DOVL1 /NT$(@F) /Fo$@ $(WIN)\termcap.c

$(OBJ)\termcap.2-b: $(HACK_H)	$(INCL)\wintty.h	$(INCL)\termcap.h \
	$(WIN)\termcap.c
	$(CC) $(CFLAGS) /DOVL2 /DOVLB /NT$(@F) /Fo$@ $(WIN)\termcap.c

$(OBJ)\topl.0: $(HACK_H)	$(INCL)\termcap.h	$(INCL)\wintty.h \
	$(WIN)\topl.c
	$(CC) $(CFLAGS) /DOVL0 /NT$(@F) /Fo$@ $(WIN)\topl.c

$(OBJ)\topl.1-2: $(HACK_H)	$(INCL)\termcap.h	$(INCL)\wintty.h \
	$(WIN)\topl.c
	$(CC) $(CFLAGS) /DOVL1 /DOVL2 /NT$(@F) /Fo$@ $(WIN)\topl.c

$(OBJ)\topl.b: $(HACK_H)	$(INCL)\termcap.h	$(INCL)\wintty.h \
	$(WIN)\topl.c
	$(CC) $(CFLAGS) /DOVLB /NT$(@F) /Fo$@ $(WIN)\topl.c

$(OBJ)\wintty.o: $(HACK_H)	$(INCL)\wintty.h	$(INCL)\termcap.h \
	$(WIN)\wintty.c
	$(CC) $(CFLAGS) /DOVL0 /DOVL1 /DOVL2 /DOVLB /Fo$@ $(WIN)\wintty.c

#
#	$(SRC) files.
#
# DO NOT DELETE THIS LINE
#

$(OBJ)\allmain.0:	$(HACK_H)
$(OBJ)\allmain.1:	$(HACK_H)
$(OBJ)\allmain.2-b:	$(HACK_H)
$(OBJ)\alloc.o:		$(CONFIG_H)
$(OBJ)\apply.0:		$(HACK_H)	$(INCL)\edog.h
$(OBJ)\apply.1:		$(HACK_H)	$(INCL)\edog.h
$(OBJ)\apply.2-b:	$(HACK_H)	$(INCL)\edog.h
$(OBJ)\artifact.0:	$(HACK_H)	$(INCL)\artifact.h  $(INCL)\artilist.h
$(OBJ)\artifact.1:	$(HACK_H)	$(INCL)\artifact.h  $(INCL)\artilist.h
$(OBJ)\artifact.2:	$(HACK_H)	$(INCL)\artifact.h  $(INCL)\artilist.h
$(OBJ)\artifact.b:	$(HACK_H)	$(INCL)\artifact.h  $(INCL)\artilist.h
$(OBJ)\attrib.0:	$(HACK_H)
$(OBJ)\attrib.1:	$(HACK_H)
$(OBJ)\attrib.2-b:	$(HACK_H)
$(OBJ)\ball.o:		$(HACK_H)
$(OBJ)\bones.o:		$(HACK_H)
$(OBJ)\botl.0:		$(HACK_H)
$(OBJ)\botl.1:		$(HACK_H)
$(OBJ)\botl.2:		$(HACK_H)
$(OBJ)\botl.b:		$(HACK_H)
$(OBJ)\cmd.0:		$(HACK_H)	$(INCL)\func_tab.h
$(OBJ)\cmd.1:		$(HACK_H)	$(INCL)\func_tab.h
$(OBJ)\cmd.b:		$(HACK_H)	$(INCL)\func_tab.h
$(OBJ)\dbridge.0:	$(HACK_H)
$(OBJ)\dbridge.1-b:	$(HACK_H)
$(OBJ)\decl.o:		$(HACK_H)	$(INCL)\quest.h
$(OBJ)\detect.o:	$(HACK_H)	$(INCL)\artifact.h
$(OBJ)\display.o:	$(HACK_H)
$(OBJ)\do.0:		$(HACK_H)	$(INCL)\lev.h
$(OBJ)\do.1:		$(HACK_H)	$(INCL)\lev.h
$(OBJ)\do.2:		$(HACK_H)	$(INCL)\lev.h
$(OBJ)\do.3:		$(HACK_H)	$(INCL)\lev.h
$(OBJ)\do.b:		$(HACK_H)	$(INCL)\lev.h
$(OBJ)\do_name.0:	$(HACK_H)
$(OBJ)\do_name.1-b:	$(HACK_H)
$(OBJ)\do_wear.0-1:	$(HACK_H)
$(OBJ)\do_wear.2:	$(HACK_H)
$(OBJ)\do_wear.b:	$(HACK_H)
$(OBJ)\dog.0:		$(HACK_H)	$(INCL)\edog.h
$(OBJ)\dog.1:		$(HACK_H)	$(INCL)\edog.h
$(OBJ)\dog.2:		$(HACK_H)	$(INCL)\edog.h
$(OBJ)\dog.b:		$(HACK_H)	$(INCL)\edog.h
$(OBJ)\dogmove.0:	$(HACK_H)	$(INCL)\mfndpos.h	$(INCL)\edog.h
$(OBJ)\dogmove.1-b:	$(HACK_H)	$(INCL)\mfndpos.h	$(INCL)\edog.h
$(OBJ)\dokick.o:	$(HACK_H)	$(ESHK_H)
$(OBJ)\dothrow.o:	$(HACK_H)
$(OBJ)\drawing.o:	$(HACK_H)	$(INCL)\termcap.h
$(OBJ)\dungeon.o:	$(HACK_H)	$(DGN_FILE_H)
$(OBJ)\eat.0:		$(HACK_H)
$(OBJ)\eat.1:		$(HACK_H)
$(OBJ)\eat.2-b:		$(HACK_H)
$(OBJ)\end.o:		$(HACK_H)	$(ESHK_H)
$(OBJ)\engrave.0-1:	$(HACK_H)	$(INCL)\lev.h
$(OBJ)\engrave.2:	$(HACK_H)	$(INCL)\lev.h
$(OBJ)\engrave.b:	$(HACK_H)	$(INCL)\lev.h
$(OBJ)\exper.o:		$(HACK_H)
$(OBJ)\explode.o:	$(HACK_H)
$(OBJ)\extralev.o:	$(HACK_H)
$(OBJ)\files.o:		$(HACK_H)
$(OBJ)\fountain.o:	$(HACK_H)
$(OBJ)\hack.0:		$(HACK_H)
$(OBJ)\hack.1:		$(HACK_H)
$(OBJ)\hack.2:		$(HACK_H)
$(OBJ)\hack.b:		$(HACK_H)
$(OBJ)\hacklib.0:	$(HACK_H)
$(OBJ)\hacklib.1:	$(HACK_H)
$(OBJ)\hacklib.2-b:	$(HACK_H)
$(OBJ)\invent.0:	$(HACK_H)	$(INCL)\artifact.h
$(OBJ)\invent.1:	$(HACK_H)	$(INCL)\artifact.h
$(OBJ)\invent.2:	$(HACK_H)	$(INCL)\artifact.h
$(OBJ)\invent.3:	$(HACK_H)	$(INCL)\artifact.h
$(OBJ)\invent.b:	$(HACK_H)	$(INCL)\artifact.h
$(OBJ)\lock.0:		$(HACK_H)
$(OBJ)\lock.1-b:	$(HACK_H)
$(OBJ)\mail.0:		$(HACK_H)	$(INCL)\mail.h
$(OBJ)\mail.1-b:	$(HACK_H)	$(INCL)\mail.h
$(OBJ)\makemon.0-2:	$(HACK_H)	$(EPRI_H)	$(EMIN_H)
$(OBJ)\makemon.b:	$(HACK_H)	$(EPRI_H)	$(EMIN_H)
$(OBJ)\mcastu.o:	$(HACK_H)
$(OBJ)\mhitm.0:		$(HACK_H)	$(INCL)\artifact.h	$(INCL)\edog.h
$(OBJ)\mhitm.1-b:	$(HACK_H)	$(INCL)\artifact.h	$(INCL)\edog.h
$(OBJ)\mhitu.0-1:	$(HACK_H)	$(INCL)\artifact.h	$(INCL)\edog.h
$(OBJ)\mhitu.2-b:	$(HACK_H)	$(INCL)\artifact.h	$(INCL)\edog.h
$(OBJ)\minion.o:	$(HACK_H)	$(EMIN_H)
$(OBJ)\mklev.o:		$(HACK_H)
$(OBJ)\mkmaze.o:	$(HACK_H)	$(SP_LEV_H)
$(OBJ)\mkobj.0:		$(HACK_H)	$(INCL)\artifact.h	$(INCL)\prop.h
$(OBJ)\mkobj.1:		$(HACK_H)	$(INCL)\artifact.h	$(INCL)\prop.h
$(OBJ)\mkobj.2-b:	$(HACK_H)	$(INCL)\artifact.h	$(INCL)\prop.h
$(OBJ)\mkroom.0:	$(HACK_H)
$(OBJ)\mkroom.1-b:	$(HACK_H)
$(OBJ)\mon.0-1:		$(HACK_H)	$(INCL)\mfndpos.h	$(INCL)\edog.h
$(OBJ)\mon.2-b:		$(HACK_H)	$(INCL)\mfndpos.h	$(INCL)\edog.h
$(OBJ)\mondata.0-1:	$(HACK_H)	$(ESHK_H)	$(EPRI_H)
$(OBJ)\mondata.2:	$(HACK_H)	$(ESHK_H)	$(EPRI_H)
$(OBJ)\mondata.b:	$(HACK_H)	$(ESHK_H)	$(EPRI_H)
$(OBJ)\monmove.0-1:	$(HACK_H)	$(INCL)\mfndpos.h $(INCL)\artifact.h
$(OBJ)\monmove.2-b:	$(HACK_H)	$(INCL)\mfndpos.h $(INCL)\artifact.h
$(OBJ)\monst.o:		$(CONFIG_H)	$(PERMONST_H)	$(INCL)\monsym.h \
			$(ESHK_H)	$(VAULT_H)	$(EPRI_H) \
			$(INCL)\color.h
$(OBJ)\monstr.o:	$(CONFIG_H)
$(OBJ)\mplayer.o:	$(HACK_H)
$(OBJ)\mthrowu.0:	$(HACK_H)
$(OBJ)\mthrowu.1:	$(HACK_H)
$(OBJ)\mthrowu.2-b:	$(HACK_H)
$(OBJ)\muse.o:		$(HACK_H)
$(OBJ)\music.o:		$(HACK_H)
$(OBJ)\o_init.o:	$(HACK_H)
$(OBJ)\objects.o:	$(CONFIG_H)	$(INCL)\obj.h	$(INCL)\objclass.h \
			$(INCL)\prop.h	$(INCL)\color.h
$(OBJ)\objnam.0-1:	$(HACK_H)
$(OBJ)\objnam.2-b:	$(HACK_H)
$(OBJ)\options.o:	$(HACK_H)	$(INCL)\termcap.h
$(OBJ)\pager.o:		$(HACK_H)
	$(CC) $(CFLAGS) /Od /Fo$(OBJ)\$*.o $*.c
$(OBJ)\pickup.o:	$(HACK_H)
$(OBJ)\pline.o:		$(HACK_H)	$(EPRI_H)
$(OBJ)\polyself.0-1:	$(HACK_H)
$(OBJ)\polyself.2-b:	$(HACK_H)
$(OBJ)\potion.o:	$(HACK_H)
$(OBJ)\pray.o:		$(HACK_H)	$(EPRI_H)
$(OBJ)\priest.0:	$(HACK_H)	$(INCL)\mfndpos.h	$(ESHK_H) \
			$(EPRI_H)	$(EMIN_H)
$(OBJ)\priest.1-b:	$(HACK_H)	$(INCL)\mfndpos.h	$(ESHK_H) \
			$(EPRI_H)	$(EMIN_H)
$(OBJ)\quest.o:		$(HACK_H)	$(INCL)\quest.h	$(INCL)\qtext.h
$(OBJ)\questpgr.o:	$(HACK_H)	$(INCL)\qtext.h
$(OBJ)\read.0:		$(HACK_H)
$(OBJ)\read.1-b:	$(HACK_H)
$(OBJ)\rect.o:		$(HACK_H)
$(OBJ)\restore.o:	$(HACK_H)	$(INCL)\lev.h	$(INCL)\termcap.h \
			$(INCL)\quest.h
$(OBJ)\rip.o:		$(HACK_H)
$(OBJ)\rnd.0:		$(HACK_H)
$(OBJ)\rnd.1:		$(HACK_H)
$(OBJ)\rnd.2-b:		$(HACK_H)
$(OBJ)\rumors.o:	$(HACK_H)
$(OBJ)\save.o:		$(HACK_H)	$(INCL)\lev.h	$(INCL)\quest.h
$(OBJ)\shk.0:		$(HACK_H)	$(ESHK_H)
$(OBJ)\shk.1-b:		$(HACK_H)	$(ESHK_H)
$(OBJ)\shknam.0:	$(HACK_H)	$(ESHK_H)
$(OBJ)\shknam.1-b:	$(HACK_H)	$(ESHK_H)
$(OBJ)\sit.o:		$(HACK_H)	$(INCL)\artifact.h
$(OBJ)\sounds.0:	$(HACK_H)	$(INCL)\edog.h	$(ESHK_H)
$(OBJ)\sounds.1-b:	$(HACK_H)	$(INCL)\edog.h	$(ESHK_H)
$(OBJ)\sp_lev.o:	$(HACK_H)	$(SP_LEV_H)	$(INCL)\rect.h
$(OBJ)\spell.o:		$(HACK_H)
$(OBJ)\steal.0-1:	$(HACK_H)
$(OBJ)\steal.2-b:	$(HACK_H)
$(OBJ)\timeout.0:	$(HACK_H)
$(OBJ)\timeout.1-b:	$(HACK_H)
$(OBJ)\topten.o:	$(HACK_H)
$(OBJ)\track.0:		$(HACK_H)
$(OBJ)\track.1:		$(HACK_H)
$(OBJ)\track.2-b:	$(HACK_H)
$(OBJ)\trap.0-1:	$(HACK_H)	$(INCL)\edog.h
$(OBJ)\trap.2:		$(HACK_H)	$(INCL)\edog.h
$(OBJ)\trap.b:		$(HACK_H)	$(INCL)\edog.h
$(OBJ)\u_init.o:	$(HACK_H)
$(OBJ)\uhitm.o:		$(HACK_H)	$(INCL)\artifact.h
$(OBJ)\vault.0:		$(HACK_H)	$(VAULT_H)
$(OBJ)\vault.1-b:	$(HACK_H)	$(VAULT_H)
$(OBJ)\version.o:	$(HACK_H)	$(INCL)\date.h	$(INCL)\patchlev.h
$(OBJ)\vision.o:	$(HACK_H)	$(INCL)\vis_tab.h
$(OBJ)\vis_tab.o:	$(HACK_H)	$(INCL)\vis_tab.h
$(OBJ)\weapon.0-1:	$(HACK_H)
$(OBJ)\weapon.2-b:	$(HACK_H)
$(OBJ)\were.0:		$(HACK_H)
$(OBJ)\were.1-b:	$(HACK_H)
$(OBJ)\wield.o:		$(HACK_H)
$(OBJ)\wizard.0:	$(HACK_H)	$(INCL)\qtext.h
$(OBJ)\wizard.1-b:	$(HACK_H)	$(INCL)\qtext.h
$(OBJ)\worm.o:		$(HACK_H)	$(INCL)\lev.h
$(OBJ)\worn.o:		$(HACK_H)
$(OBJ)\write.o:		$(HACK_H)
$(OBJ)\zap.o:		$(HACK_H)
