# NetHack 3.5	Makefile.BC	$NHDT-Date$  $NHDT-Branch$:$NHDT-Revision$
# NetHack 3.5	Makefile.BC	$Date: 2012/01/10 17:47:26 $  $Revision: 1.14 $
# Copyright (c) Yitzhak Sapir, 1999-2006.
# NetHack may be freely distributed.  See license for details.
#

# PC NetHack 3.5 Makefile for Borland C++ 3.1 and 4.5.
#
# Nota Bene:	Before you get to here you should have already read
# 		the Install.dos file located in the sys/msdos directory.
#		Additionally, you should run this makefile with the -N
#		Microsoft Compatibility option.
#
# This Makefile is for use with Borland C++ version 3.1 and 4.5, but might
# also work with more up to date versions.
#
# This Makefile is specific to Borland's MAKE which is supplied with the
# compiler.  It supports only one overlay management facility - VROOMM.
# (This Makefile won't work with make45l or NDMAKE)
#
# NOTE: This Makefile has not been tested with NetHack 3.5.x

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

GAME	= NetHack
GAMEDIR = ..\binary

#
#
# Directories
#

DAT	= ..\dat
DOC	= ..\doc
INCL	= ..\include
SRC	= ..\src
OBJ	= o
MSYS	= ..\sys\msdos
SYS	= ..\sys\share
UTIL	= ..\util
WTTY	= ..\win\tty
WSHR	= ..\win\share


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

CC	 = bcc		# Compiler
LINK	 = tlink	# Linker
ASM	 = tasm		# Assembler (not currently needed for BC)
MAKEBIN  = make
UUDECODE = uudecode	# Unix style uudecoder

#BCTOP	 = c:\borlandc	# main Borland C++ directory
BCTOP	 = c:\bc31

#
# Yacc/Lex ... if you got 'em.
#
# If you have yacc and lex programs (or work-alike such as bison
# and flex), comment out the upper two lines below, and uncomment
# the lower two.
#
# On Borland C++, the newest versions of flex and bison provide
# problems when run from MAKE.
#

DO_YACC = YACC_MSG
DO_LEX  = LEX_MSG
#DO_YACC  = YACC_ACT
#DO_LEX   = LEX_ACT

#
# - Specify your yacc and lex programs (or work-alikes for each) here.
#

YACC	= bison -y
#YACC   = yacc
#YACC   = byacc

LEX     = flex
#LEX    = lex

#
# - Specify your flex skeleton file (if needed).
#
FLEXSKEL =
#FLEXSKEL = -Sc:\tools16\flex.ske

#
# - Your yacc (or work-alike) output files
#
YTABC	= y_tab.c
YTABH	= y_tab.h
#YTABC  = ytab.c
#YTABH  = ytab.h

#
# - Your lex (or work-alike) output files
#
LEXYYC	= lexyy.c
#LEXYYC	= lex.yy.c

#
# 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 = $(SYS)\termcap.lib

#
# MEMORY USAGE AND OVERLAYING
#
# Overlay Schema 1
#
#   - Minimal extended memory available, lots of 640K base RAM free
#     Minimize overlay turns. Requires that a minimum of
#     607K RAM be free as follows:
#     462K  Executable load requirement
#     115K  for malloc() calls
#      30K  Overlay buffer
#     607K  Total memory requirement
#
# Overlay Schema 2
#
#   - Favor small load size, requires extended memory for bearable performance.
#     If you have very little base 640K RAM available, but lots of extended
#     memory for caching overlays, you might try this. (eg. A machine with
#     lots of TSR's or network drivers).  Do not try to set SCHEMA = 2
#     without a disk cache and extended memory.
#     381K  Executable load requirement
#     115K  for malloc() calls
#      30K  Overlay buffer
#     526K  Total memory requirement
#
# On Borland C++, you have to make a full rebuild of all object modules each
# time you change schemas.
#

SCHEMA	= 2

#
# OPTIONAL TILE SUPPORT.
#
#	This release of NetHack allows you to build a version of NetHack
#	that will draw 16x16 color tiles on the display to represent
#	NetHack maps, objects, monsters, etc. on machines with appropriate
#	display hardware.  Currently the only supported video hardware is
#	VGA.
#
#	Note:  You can build NetHack with tile support and then choose
#	whether to use it or not at runtime via the defaults.nh file option
#	"video".
#

TILESUPPORT = Y

#
#  C COMPILER AND LINKER SETTINGS
#
#   For debugging ability, comment out the upper three
#   macros and uncomment the lower three.  You can also
#   uncomment only either LDFLAGSU or LDFLAGSN if you
#   want to include debug information only in the utilities
#   or only in the game file.

#   On Borland C++, you cannot include debug information for
#   all the object modules because the linker cannot handle
#   it.

#CDFLAGS  =
LDFLAGSN  =
#LDFLAGSU =

CDFLAGS	  = -v -vi		# use debug info (compiler)
#LDFLAGSN = /v			# use debug info (linker - game)
LDFLAGSU  = /v			# use debug info (linker - utilities)

#
# - Don't warn about unreachable code because flex generates a whole bunch
#   of unreachable code warnings, which stops the compile process.
#

CW = -w-rch

#
#   Select whether to use pre-compiled headers or not.
#   Set PRECOMPHEAD to Y to use pre-compiled headers, set it to anything
#   else and pre-compiled headers will not be used.
#   (Pre-compiled headers speed up compiles, but require a bit more
#   disk space during the build.  The pre-compiled headers can be deleted
#   afterwards via DEL *.PCH if desired).
#

PRECOMPHEAD = N

#
#   C Compiler Flags
#

CFLAGS = -c

#  Uncomment the line below if you want to store all the level files,
#  help files, etc. in a single library file (recommended).

USE_DLB = Y

#
########################################################################
########################################################################
#
#  Nothing below here should have to be changed.
#
########################################################################
########################################################################
#
#  Warning:
#
#  Changing anything below here means that you should be *very*
#  familiar with your compiler's workings, *very* knowledgeable
#  about the overlay structure and mechanics of NetHack, and *very*
#  confident in your understanding of Makefiles and Make utilities.
#
########################################################################
#
# Default Make Procedure
#

default: $(GAME)

#
########################################################################
# Tile preparation
#

! IF ("$(TILESUPPORT)"=="Y")

TILEGAME  = $(OBJ)\tile.o	$(OBJ)\pctiles.0	$(OBJ)\pctiles.b

#
#   -  VGA Tile Support, uncomment these three lines.
#

TILEVGA    = $(OBJ)\vidvga.0 $(OBJ)\vidvga.1 $(OBJ)\vidvga.2 $(OBJ)\vidvga.b
PLANAR_TIB = NetHack1.tib
OVERVIEW_TIB = NetHacko.tib

#
# Leave this line uncommented and unchanged.
TILEUTIL  =  $(TILEGAME) $(TILEVGA) $(UTIL)\tile2bin.exe $(UTIL)\til2bin2.exe \
		 $(PLANAR_TIB) $(OVERVIEW_TIB)

! ENDIF

! IF ("$(USE_DLB)"=="Y")
DLB = nhdat
! ELSE
DLB =
! ENDIF

#
#############################################################################
#
# General Overlay Schema Settings
#

OVLINIT =$(OBJ)\ovlinit.o


#
#############################################################################
#
# C Compiler and Linker Setup Options
# (To Maintainer; modify only if absolutely necessary)
#

BCINCL	 = $(BCTOP)\include	# include directory for main BC headers
BCLIB	 = $(BCTOP)\lib		# library directory for main BC libraries
BCCFG	 = nethack.cfg		# name of the nethack configuration file
VROOMMCFG= vroomm.cfg		# name of file with code segment information

#
# Model
#

MODEL	 = h

#
# - Optional C library specifier for those with non-standard
#   libraries or a multiple-target library setup.
#

CLIB    =

#
# Borland C++ libraries
#

BCOVL	= $(BCLIB)\OVERLAY
BCMDL	= $(BCLIB)\C$(MODEL)

#
# Compiler Options
#

CNOLNK	= -c			# just generate .OBJ
CPCHUSE	= -Hu			# use precompiled headers
CPCHGEN	= -H			# generate precompiled headers
CPCHNAM	= -H=			# set the name of the precompiled header file
CPCHEXT = .PCH			# precompiled header extension
CDEFINE	= -D			# define a macro
CSTKSZ	= -DSTKSIZ=		# set stack size
CCSNAM	= -zC			# set the code segment name
COBJNAM	= -o			# name the .OBJ file

#
# Linker Options
#

LWCASE	= /c			# treat case as significant
LMAP	= /m			# create map file
LINIT	= $(BCLIB)\C0$(MODEL)	# initialization object file
LOVL	= /oOVLY		# overlay all needed segments

#
# Stack Sizes
#

STKSUTL	= 4096			# Utilities Stack Size
STKSNRM = 5120			# Normal Stack Size

CUSTACK	= $(CSTKSZ)$(STKSUTL)	# Utilities Stack Set for Compiler
CNSTACK	= $(CSTKSZ)$(STKSNRM)	# Normal Stack Set for Compiler


#
########################################################################
# DLB preparation
#

! IF ("$(USE_DLB)"=="Y")
DLBFLG = $(CDEFINE)DLB
! ELSE
DLBFLG =
! ENDIF

#
########################################################################
# tile preparation
#

! IF ("$(TILESUPPORT)"=="Y")
TILFLG = $(CDEFINE)USE_TILES
! ELSE
TILFLG =
! ENDIF

#############################################################################
#
# Overlay switches
#

COVL0	= $(CDEFINE)OVL0
COVL1	= $(CDEFINE)OVL1
COVL2	= $(CDEFINE)OVL2
COVL3	= $(CDEFINE)OVL3
COVLB	= $(CDEFINE)OVLB

#
# Flags
#

FLAGOPT = $(DLBFLG) $(TILFLG)

#
# Precompiled Header Section
#

#common options (placed in $(BCCFG))
CFLGTOT = $(CDFLAGS) $(CFLAGS) $(FLAGOPT) $(CW)
#util builds
CFLAGSU	= $(CUSTACK) +$(VROOMMCFG)
#normal build, no PCH
CFLAGSN = $(CNSTACK) +$(VROOMMCFG)
#no optimizations
CFLAGNO = $(CNOOPT) $(CFLAGSN)

! IF ("$(PRECOMPHEAD)"!="Y")

CFLAGCO = $(COVLO)
CFLAGUO = $(COVLO)
CFLAGC0 = $(COVL0)
CFLAGU0 = $(COVL0)
CFLAGC1 = $(COVL1)
CFLAGU1 = $(COVL1)
CFLAGC2 = $(COVL2)
CFLAGU2 = $(COVL2)
CFLAGC3 = $(COVL3)
CFLAGU3 = $(COVL3)
CFLAGCB = $(COVLB)
CFLAGUB = $(COVLB)
PCHO =
PCH0 =
PCH1 =
PCH2 =
PCH3 =
PCHB =

precomp.msg:
	@echo Not using precompiled headers...

! ELSE

# .o files
CFLAGUO	= $(CPCHUSE) $(CPCHNAM)PHO$(CPCHEXT) $(COVLO)
CFLAGCO	= $(CPCHGEN) $(CPCHNAM)PHO$(CPCHEXT) $(COVLO)
PCHO = PHO$(CPCHEXT)
# .0 files
CFLAGU0	= $(CPCHUSE) $(CPCHNAM)PH0$(CPCHEXT) $(COVL0)
CFLAGC0	= $(CPCHGEN) $(CPCHNAM)PH0$(CPCHEXT) $(COVL0)
PCH0 = PH0$(CPCHEXT)
# .1 files
CFLAGU1	= $(CPCHUSE) $(CPCHNAM)PH1$(CPCHEXT) $(COVL1)
CFLAGC1	= $(CPCHGEN) $(CPCHNAM)PH1$(CPCHEXT) $(COVL1)
PCH1 = PH1$(CPCHEXT)
# .2 files
CFLAGU2	= $(CPCHUSE) $(CPCHNAM)PH2$(CPCHEXT) $(COVL2)
CFLAGC2	= $(CPCHGEN) $(CPCHNAM)PH2$(CPCHEXT) $(COVL2)
PCH2 = PH2$(CPCHEXT)
# .3 files
CFLAGU3	= $(CPCHUSE) $(CPCHNAM)PH3$(CPCHEXT) $(COVL3)
CFLAGC3	= $(CPCHGEN) $(CPCHNAM)PH3$(CPCHEXT) $(COVL3)
PCH3 = PH3$(CPCHEXT)
# .B files
CFLAGUB	= $(CPCHUSE) $(CPCHNAM)PHB$(CPCHEXT) $(COVLB)
CFLAGCB	= $(CPCHGEN) $(CPCHNAM)PHB$(CPCHEXT) $(COVLB)
PCHB = PHB$(CPCHEXT)

precomp.msg:
	@echo Using precompiled headers...

! ENDIF


FLAGCO  = $(CNSTACK) +$(VROOMMCFG)
FLAGUO  = $(CNSTACK) +$(VROOMMCFG)
FLAGC0  = $(CNSTACK) +$(VROOMMCFG)
FLAGU0  = $(CNSTACK) +$(VROOMMCFG)
FLAGC1  = $(CNSTACK) +$(VROOMMCFG)
FLAGU1  = $(CNSTACK) +$(VROOMMCFG)
FLAGC2  = $(CNSTACK) +$(VROOMMCFG)
FLAGU2  = $(CNSTACK) +$(VROOMMCFG)
FLAGC3  = $(CNSTACK) +$(VROOMMCFG)
FLAGU3  = $(CNSTACK) +$(VROOMMCFG)
FLAGCB  = $(CNSTACK) +$(VROOMMCFG)
FLAGUB  = $(CNSTACK) +$(VROOMMCFG)

# End of Pre-compiled header section
#===========================================================================

#
# Basic Borland C++ option line
#
BCOPTS1 = -Y -O -Z -Oe -Ob -Os -Ff -I$(BCINCL);$(INCL) -m$(MODEL)
BCOPTS2 = $(CDEFINE)__IO_H $(CFLGTOT) -DSTRNCMPI

#
# Linker options for building various things.
#

LFLAGSU	= $(LDFLAGSU) $(LUSTACK) $(LINIT)
LFLAGSN	= $(LDFLAGSN) $(LNSTACK) $(LWCASE) $(LMAXSEG) $(INTOVL) $(LMAXALL) \
	  $(LINFO) $(LINIT) $(LOVL)

#
# Make Roolz dude.
# Due to the inadequacy of some makes 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 .1 .2 .3 .B .o .til .uu .c .y .l

#
# Rules for files in src
#


.c{$(OBJ)}.o:
	@type schema$(SCHEMA).bc | find "$(@B)_o" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGUO) >> $(VROOMMCFG)
	$(CC) $(FLAGUO) $(COBJNAM)$@ $<

{$(SRC)}.c{$(OBJ)}.o:
	@type schema$(SCHEMA).bc | find "$(@B)_o" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGUO) >> $(VROOMMCFG)
	$(CC) $(FLAGUO) $(COBJNAM)$@ $<

{$(SRC)}.c{$(OBJ)}.0:
	@type schema$(SCHEMA).bc | find "$(@B)_0" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU0) >> $(VROOMMCFG)
	$(CC) $(FLAGU0) $(COBJNAM)$@ $<

{$(SRC)}.c{$(OBJ)}.1:
	@type schema$(SCHEMA).bc | find "$(@B)_1" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU1) >> $(VROOMMCFG)
	$(CC) $(FLAGU1) $(COBJNAM)$@ $<

{$(SRC)}.c{$(OBJ)}.2:
	@type schema$(SCHEMA).bc | find "$(@B)_2" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU2) >> $(VROOMMCFG)
	$(CC) $(FLAGU2) $(COBJNAM)$@ $<

{$(SRC)}.c{$(OBJ)}.3:
	@type schema$(SCHEMA).bc | find "$(@B)_3" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU3) >> $(VROOMMCFG)
	$(CC) $(FLAGU3) $(COBJNAM)$@ $<

{$(SRC)}.c{$(OBJ)}.B:
	@type schema$(SCHEMA).bc | find "$(@B)_b" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGUB) >> $(VROOMMCFG)
	$(CC) $(FLAGUB) $(COBJNAM)$@ $<

#
# Rules for files in sys\share
#

{$(SYS)}.c{$(OBJ)}.o:
	@type schema$(SCHEMA).bc | find "$(@B)_o" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGUO) >> $(VROOMMCFG)
	$(CC) $(FLAGUO) $(COBJNAM)$@ $<

{$(SYS)}.c{$(OBJ)}.0:
	@type schema$(SCHEMA).bc | find "$(@B)_0" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU0) >> $(VROOMMCFG)
	$(CC) $(FLAGU0) $(COBJNAM)$@ $<

{$(SYS)}.c{$(OBJ)}.1:
	@type schema$(SCHEMA).bc | find "$(@B)_1" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU1) >> $(VROOMMCFG)
	$(CC) $(FLAGU1) $(COBJNAM)$@ $<

{$(SYS)}.c{$(OBJ)}.2:
	@type schema$(SCHEMA).bc | find "$(@B)_2" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU2) >> $(VROOMMCFG)
	$(CC) $(FLAGU2) $(COBJNAM)$@ $<

{$(SYS)}.c{$(OBJ)}.3:
	@type schema$(SCHEMA).bc | find "$(@B)_3" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU3) >> $(VROOMMCFG)
	$(CC) $(FLAGU3) $(COBJNAM)$@ $<

{$(SYS)}.c{$(OBJ)}.B:
	@type schema$(SCHEMA).bc | find "$(@B)_b" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGUB) >> $(VROOMMCFG)
	$(CC) $(FLAGUB) $(COBJNAM)$@ $<

#
# Rules for files in sys\msdos
#

{$(MSYS)}.c{$(OBJ)}.o:
	@type schema$(SCHEMA).bc | find "$(@B)_o" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGUO) >> $(VROOMMCFG)
	$(CC) $(FLAGUO) $(COBJNAM)$@ $<

{$(MSYS)}.c{$(OBJ)}.0:
	@type schema$(SCHEMA).bc | find "$(@B)_0" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU0) >> $(VROOMMCFG)
	$(CC) $(FLAGU0) $(COBJNAM)$@ $<

{$(MSYS)}.c{$(OBJ)}.1:
	@type schema$(SCHEMA).bc | find "$(@B)_1" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU1) >> $(VROOMMCFG)
	$(CC) $(FLAGU1) $(COBJNAM)$@ $<

{$(MSYS)}.c{$(OBJ)}.2:
	@type schema$(SCHEMA).bc | find "$(@B)_2" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU2) >> $(VROOMMCFG)
	$(CC) $(FLAGU2) $(COBJNAM)$@ $<

{$(MSYS)}.c{$(OBJ)}.3:
	@type schema$(SCHEMA).bc | find "$(@B)_3" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU3) >> $(VROOMMCFG)
	$(CC) $(FLAGU3) $(COBJNAM)$@ $<

{$(MSYS)}.c{$(OBJ)}.B:
	@type schema$(SCHEMA).bc | find "$(@B)_b" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGUB) >> $(VROOMMCFG)
	$(CC) $(FLAGUB) $(COBJNAM)$@ $<

{$(MSYS)}.h{$(INCL)}.h:
	@copy $< $@

#
# Rules for files in util
#

{$(UTIL)}.c{$(OBJ)}.o:
	@type schema$(SCHEMA).bc | find "$(@B)_o" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSU) (COBJNAM)$@ $<

#
# Rules for files in win\share
#

{$(WSHR)}.c.o:
	@type schema$(SCHEMA).bc | find "$(@B)_o" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGUO) >> $(VROOMMCFG)
	@$(CC) $(FLAGUO) $(COBJNAM)$@ $<

{$(WSHR)}.c{$(OBJ)}.o:
	@type schema$(SCHEMA).bc | find "$(@B)_o" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGUO) >> $(VROOMMCFG)
	@$(CC) $(FLAGUO) $(COBJNAM)$@ $<

{$(WSHR)}.h{$(INCL)}.h:
	@copy $< $@

{$(WSHR)}.txt{$(DAT)}.txt:
	@copy $< $@

#
# Rules for files in win\tty
#

{$(WTTY)}.c{$(OBJ)}.o:
	@type schema$(SCHEMA).bc | find "$(@B)_o" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGUO) >> $(VROOMMCFG)
	$(CC) $(FLAGUO) $(COBJNAM)$@ $<

{$(WTTY)}.c{$(OBJ)}.0:
	@type schema$(SCHEMA).bc | find "$(@B)_0" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU0) >> $(VROOMMCFG)
	$(CC) $(FLAGU0) $(COBJNAM)$@ $<

{$(WTTY)}.c{$(OBJ)}.1:
	@type schema$(SCHEMA).bc | find "$(@B)_1" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU1) >> $(VROOMMCFG)
	$(CC) $(FLAGU1) $(COBJNAM)$@ $<

{$(WTTY)}.c{$(OBJ)}.2:
	@type schema$(SCHEMA).bc | find "$(@B)_2" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU2) >> $(VROOMMCFG)
	$(CC) $(FLAGU2) $(COBJNAM)$@ $<

{$(WTTY)}.c{$(OBJ)}.3:
	@type schema$(SCHEMA).bc | find "$(@B)_3" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU3) >> $(VROOMMCFG)
	$(CC) $(FLAGU3) $(COBJNAM)$@ $<

{$(WTTY)}.c{$(OBJ)}.B:
	@type schema$(SCHEMA).bc | find "$(@B)_b" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGUB) >> $(VROOMMCFG)
	$(CC) $(FLAGUB) $(COBJNAM)$@ $<

#
# NETHACK OBJECTS
#
# This section creates shorthand macros for many objects
# referenced later on in the Makefile.
#

#
# Shorten up the location for some files
#

O  = $(OBJ)\				# comment so \ isn't last char

U  = $(UTIL)\				# comment so \ isn't last char

SPLEVDES = $(DAT)\Arch.des $(DAT)\Barb.des $(DAT)\bigroom.des \
	$(DAT)\castle.des $(DAT)\Caveman.des $(DAT)\endgame.des \
	$(DAT)\gehennom.des $(DAT)\Healer.des $(DAT)\Knight.des \
	$(DAT)\knox.des $(DAT)\Monk.des $(DAT)\medusa.des \
	$(DAT)\mines.des $(DAT)\oracle.des $(DAT)\Priest.des \
	$(DAT)\Ranger.des $(DAT)\Rogue.des $(DAT)\Samurai.des \
	$(DAT)\Tourist.des $(DAT)\tower.des $(DAT)\Valkyrie.des \
	$(DAT)\Wizard.des $(DAT)\yendor.des

#
# Utility Objects.
#

MAKESRC        = $(U)makedefs.c

SPLEVSRC       = $(U)lev_yacc.c	$(U)lev_$(LEX).c $(U)lev_main.c  $(U)panic.c

DGNCOMPSRC     = $(U)dgn_yacc.c	$(U)dgn_$(LEX).c $(U)dgn_main.c

MAKEOBJS       = $(O)makedefs.o	$(O)monst.o	$(O)objects.o

SPLEVOBJS	=$(O)lev_yacc.o $(O)lev_$(LEX).o $(O)lev_main.o \
		$(O)alloc.o $(O)decl.o $(O)drawing.o $(O)monst.o \
		$(O)objects.o $(O)panic.o $(O)stubvid.o 

DGNCOMPOBJS	=$(O)dgn_yacc.o $(O)dgn_$(LEX).o $(O)dgn_main.o \
		$(O)alloc.o $(O)panic.o 

RECOVOBJS      = $(O)recover.o

GIFREADERS	=$(O)gifread.o $(O)alloc.o $(O)panic.o 

TEXT_IO	=$(O)tiletext.o $(O)tiletxt.o $(O)drawing.o \
		$(O)decl.o $(O)monst.o $(O)objects.o $(O)stubvid.o 

PPMWRITERS     = $(O)ppmwrite.o	$(O)alloc.o	$(O)panic.o

GIFREAD2	=$(O)gifread2.o $(O)alloc.o $(O)panic.o 

TEXT_IO2	=$(O)tiletex2.o $(O)tiletxt2.o $(O)drawing.o \
		$(O)decl.o $(O)monst.o $(O)objects.o $(O)stubvid.o 

PPMWRIT2       = $(O)ppmwrit2.o $(O)alloc.o	$(O)panic.o

TILEFILES      = $(WSHR)\monsters.txt $(WSHR)\objects.txt $(WSHR)\other.txt

TILEFILES2     = $(WSHR)\monthin.txt $(WSHR)\objthin.txt $(WSHR)\oththin.txt

DLBOBJS        = $(O)dlb_main.o $(O)dlb.o $(O)alloc.o $(O)panic.o

#
#  Object files for the game itself.
#

OBJ01 =	$(O)alloc.o	$(RANDOM)	$(O)decl.o     	$(O)objects.o	\
	$(O)muse.o	$(O)display.o	$(O)vision.o	$(O)mapglyph.o  \
	$(O)rect.o	$(O)vis_tab.o	$(O)monst.o	$(O)wintty.o	\
	$(O)files.o	$(O)sys.o	$(O)monstr.o	$(O)minion.o	\
	$(O)worm.o	$(O)detect.o 	$(O)exper.o	$(O)mplayer.o	\
	$(O)uhitm.o	$(O)pager.o 	$(O)windows.o	$(O)quest.o	\
	$(O)questpgr.o 	$(O)write.o	$(O)drawing.o	$(O)dokick.o	\
	$(O)dothrow.o 	$(O)pickup.o	$(O)pray.o	$(O)spell.o 	\
	$(O)ball.o	$(O)wield.o	$(O)worn.o	$(O)fountain.o	\
	$(O)music.o	$(O)rumors.o	$(O)dlb.o	$(O)sit.o 	\
	$(O)bones.o	$(O)mklev.o	$(O)save.o	$(O)restore.o 	\
	$(O)mkmaze.o	$(O)mkmap.o	$(O)end.o	$(O)o_init.o	\
	$(O)options.o	$(O)rip.o       $(O)sound.o	$(O)teleport.o	\
	$(O)topten.o	$(O)tty.o	$(O)u_init.o	$(O)extralev.o 	\
	$(O)sp_lev.o	$(O)dig.o	$(O)pckeys.o	$(O)role.o	\
	$(O)steed.o	$(O)region.o

OVL0 =	$(O)allmain.0	$(O)apply.0	$(O)artifact.0	$(O)attrib.0  \
	$(O)botl.0	$(O)cmd.0	$(O)dbridge.0	$(O)do.0      \
	$(O)do_name.0	$(O)do_wear.0	$(O)dogmove.0	$(O)dungeon.0 \
	$(O)eat.0	$(O)engrave.0	$(O)hacklib.0	$(O)invent.0  \
	$(O)lock.0	$(O)pcmain.0	$(O)mail.0	$(O)makemon.0 \
	$(O)mcastu.0	$(O)mhitm.0	$(O)mhitu.0	$(O)mkobj.0   \
	$(O)mkroom.0	$(O)mon.0	$(O)mondata.0	$(O)monmove.0 \
	$(O)mthrowu.0	$(O)objnam.0	$(O)polyself.0	$(O)priest.0  \
	$(O)rnd.0	$(O)shknam.0	$(O)sounds.0	$(O)steal.0   \
	$(O)timeout.0	$(O)track.0	$(O)trap.0	$(O)vault.0   \
	$(O)weapon.0	$(O)were.0	$(O)wizard.0	$(O)msdos.0   \
	$(O)termcap.0	$(O)video.0	$(O)vidtxt.0	$(O)zap.0     \
	$(O)explode.0	$(O)shk.0

OVL1 =	$(O)allmain.1	$(O)apply.1	$(O)artifact.1	$(O)attrib.1 \
	$(O)botl.1	$(O)cmd.1	$(O)dbridge.1	$(O)do.1     \
	$(O)do_wear.1	$(O)dog.1	$(O)dungeon.1	$(O)eat.1    \
	$(O)engrave.1	$(O)hack.1	$(O)hacklib.1	$(O)invent.1 \
	$(O)makemon.1	$(O)mhitu.1	$(O)mkobj.1	$(O)mon.1    \
	$(O)mondata.1	$(O)monmove.1	$(O)mthrowu.1	$(O)objnam.1 \
	$(O)pcmain.1	$(O)polyself.1	$(O)rnd.1	$(O)shk.1    \
	$(O)steal.1	$(O)timeout.1	$(O)track.1	$(O)trap.1   \
	$(O)weapon.1	$(O)getline.1	$(O)termcap.1	$(O)topl.1   \
	$(O)video.1	$(O)zap.1	$(O)explode.1

OVL2 =	$(O)attrib.2	$(O)do.2	$(O)do_name.2	$(O)do_wear.2 \
	$(O)dog.2	$(O)engrave.2	$(O)hack.2	$(O)hacklib.2 \
	$(O)invent.2	$(O)makemon.2	$(O)mon.2	$(O)mondata.2 \
	$(O)monmove.2	$(O)getline.2	$(O)shk.2	$(O)topl.2    \
	$(O)trap.2	$(O)zap.2

OVL3 =	$(O)do.3	$(O)hack.3	$(O)invent.3	$(O)light.3   \
	$(O)shk.3	$(O)trap.3	$(O)zap.3


OVLB =	$(O)allmain.B	$(O)apply.B	$(O)artifact.B	$(O)attrib.B	\
	$(O)botl.B	$(O)cmd.B	$(O)dbridge.B	$(O)do.B	\
	$(O)do_name.B	$(O)do_wear.B	$(O)dog.B	$(O)dogmove.B	\
	$(O)eat.B	$(O)engrave.B	$(O)hack.B	$(O)hacklib.B	\
	$(O)invent.B	$(O)lock.B	$(O)mail.B	$(O)makemon.B	\
	$(O)mcastu.B	$(O)mhitm.B	$(O)mhitu.B	$(O)mkobj.B	\
	$(O)mkroom.B	$(O)mon.B	$(O)mondata.B	$(O)monmove.B	\
	$(O)mthrowu.B	$(O)objnam.B	$(O)pcmain.B	$(O)pline.B	\
	$(O)polyself.B	$(O)potion.B	$(O)priest.B	$(O)read.B	\
	$(O)rnd.B	$(O)shk.B	$(O)shknam.B	$(O)sounds.B	\
	$(O)steal.B	$(O)timeout.B	$(O)track.B	$(O)trap.B	\
	$(O)vault.B	$(O)weapon.B	$(O)were.B	$(O)wizard.B	\
	$(O)msdos.B	$(O)pcunix.B	$(O)termcap.B	$(O)topl.B	\
	$(O)video.B	$(O)vidtxt.B	$(O)zap.B

TILOBJ = $(TILEGAME) $(TILEVGA)

VVOBJ =	$(O)version.o

NVOBJ = $(OBJ01)	$(OVL0)		$(OVL1)		$(OVL2) \
	$(OVL3) 	$(OVLB)		$(TILOBJ)

ALLOBJ= $(NVOBJ) $(VVOBJ) $(OVLINIT)

#
# Header objects
#

# This comment copied from sys/unix/Makefile.src,
# extern.h is ignored, even though its declared function types may affect the
# compilation of all the .c files, since extern.h changes every time the
# type of an external function does, and we would spend all our time recompiling
# if we did not ignore it.
#EXTERN_H    = $(INCL)\extern.h
EXTERN_H    =
PCCONF_H    = $(INCL)\pcconf.h $(INCL)\micro.h $(INCL)\system.h
PERMONST_H  = $(INCL)\monattk.h $(INCL)\monflag.h $(INCL)\align.h
YOUPROP_H   = $(INCL)\prop.h $(PERMONST_H) $(INCL)\pm.h $(INCL)\youprop.h \
	      $(INCL)\mondata.h
YOU_H	    = $(INCL)\attrib.h $(INCL)\monst.h $(INCL)\mextra.h $(YOUPROP_H) \
              $(INCL)\align.h
DECL_H      = $(INCL)\quest.h $(INCL)\spell.h $(INCL)\color.h \
	      $(INCL)\obj.h $(YOU_H) $(INCL)\onames.h $(INCL)\pm.h

CONFIG_H    = $(INCL)\config1.h $(INCL)\tradstdc.h $(INCL)\coord.h $(PCCONF_H) \
	      $(INCL)\config.h
HACK_H      = $(CONFIG_H) $(INCL)\context.h $(INCL)\dungeon.h $(INCL)\align.h \
	      $(INCL)\monsym.h $(INCL)\mkroom.h $(INCL)\objclass.h $(DECL_H) \
	      $(INCL)\timeout.h $(INCL)\trap.h $(INCL)\flag.h $(INCL)\rm.h \
	      $(INCL)\vision.h $(INCL)\mondata.h $(INCL)\wintype.h \
	      $(INCL)\engrave.h $(INCL)\rect.h $(EXTERN_H) $(INCL)\sys.h \
	      $(INCL)\winprocs.h $(INCL)\trampoli.h $(INCL)\display.h
TILE_H      = $(INCL)\tile.h $(INCL)\pctiles.h
PCVIDEO_H   = $(INCL)\portio.h $(INCL)\pcvideo.h
ALIGN_H     = $(INCL)\align.h
ARTIFACT_H  = $(INCL)\artifact.h
ARTILIST_H  = $(INCL)\artilist.h
COLOR_H     = $(INCL)\color.h
DATE_H      = $(INCL)\date.h
DGN_FILE_H  = $(INCL)\dgn_file.h
DLB_H	    = $(INCL)\dlb.h
FUNC_TAB_H  = $(INCL)\func_tab.h
LEV_H       = $(INCL)\lev.h
LEV_COMP_H  = $(INCL)\lev_comp.h
MAIL_H      = $(INCL)\mail.h
MFNDPOS_H   = $(INCL)\mfndpos.h
MONSYM_H    = $(INCL)\monsym.h
OBJ_H       = $(INCL)\obj.h
OBJCLASS_H  = $(INCL)\objclass.h
OBJECTS_H   = $(INCL)\objects.h
PROP_H      = $(INCL)\prop.h
QTEXT_H     = $(INCL)\qtext.h
QUEST_H     = $(INCL)\quest.h
SP_LEV_H    = $(INCL)\sp_lev.h
TERMCAP_H   = $(INCL)\tcap.h
VIS_TAB_H   = $(INCL)\vis_tab.h
WINTTY_H    = $(INCL)\wintty.h

#
# In the unix distribution this file is patchlevel.h, make it 8.3 here
# to avoid an nmake warning under dos.
#

PATCHLEVEL_H   = $(INCL)\patchlev.h


#
#  The name of the game.
#

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

#
# make data.base an 8.3 filename to prevent an nmake warning
#

DATABASE = $(DAT)\data.bas

#######################################################################
#
#  TARGETS

#
#  The main target.
#

$(GAME): obj.tag envchk $(U)utility.tag $(GAMEFILE)
	@echo $(GAME) is up to date.

#
#  Everything
#

all :	install

install: $(GAME) install.tag
	@echo Done.


install.tag: 	$(DAT)\data	$(DAT)\rumors	$(DAT)\dungeon \
	 	$(DAT)\oracles	$(DAT)\quest.dat $(DAT)\sp_lev.tag $(DLB)
! IF ("$(USE_DLB)"=="Y")
	copy nhdat                $(GAMEDIR)
	copy $(DAT)\license       $(GAMEDIR)
! ELSE
	copy $(DAT)\*.            $(GAMEDIR)
	copy $(DAT)\*.dat         $(GAMEDIR)
	copy $(DAT)\*.lev         $(GAMEDIR)
	copy $(MSYS)\msdoshlp.txt $(GAMEDIR)
	if exist $(GAMEDIR)\makefile del $(GAMEDIR)\makefile
! ENDIF
	copy $(SYS)\termcap       $(GAMEDIR)
	if exist $(DAT)\symbols copy $(DAT)\symbols $(GAMEDIR)
	if exist $(DOC)\guideb*.txt copy $(DOC)\guideb*.txt  $(GAMEDIR)
	if exist $(DOC)\nethack.txt copy $(DOC)\nethack.txt  $(GAMEDIR)\NetHack.txt
	if exist $(DOC)\recover.txt copy $(DOC)\recover.txt  $(GAMEDIR)
	copy $(SYS)\NetHack.cnf   $(GAMEDIR)\defaults.nh
	copy $(MSYS)\NHAccess.nh  $(GAMEDIR)
	copy $(U)recover.exe  $(GAMEDIR)
	if exist *.tib copy *.tib $(GAMEDIR)
	echo install done > $@

$(DAT)\sp_lev.tag: $(U)utility.tag $(SPLEVDES)
	cd $(DAT)
	$(U)lev_comp bigroom.des
	$(U)lev_comp castle.des
	$(U)lev_comp endgame.des
	$(U)lev_comp gehennom.des
	$(U)lev_comp knox.des
	$(U)lev_comp mines.des
	$(U)lev_comp medusa.des
	$(U)lev_comp oracle.des
	$(U)lev_comp sokoban.des
	$(U)lev_comp tower.des
	$(U)lev_comp yendor.des
	$(U)lev_comp arch.des
	$(U)lev_comp barb.des
	$(U)lev_comp caveman.des
	$(U)lev_comp healer.des
	$(U)lev_comp knight.des
	$(U)lev_comp monk.des
	$(U)lev_comp priest.des
	$(U)lev_comp ranger.des
	$(U)lev_comp rogue.des
	$(U)lev_comp samurai.des
	$(U)lev_comp tourist.des
	$(U)lev_comp valkyrie.des
	$(U)lev_comp wizard.des
	cd $(SRC)
	echo sp_levs done > $(DAT)\sp_lev.tag

$(U)utility.tag: envchk			$(INCL)\date.h	$(INCL)\onames.h \
		$(INCL)\pm.h 		$(SRC)\monstr.c	$(SRC)\vis_tab.c \
		$(U)lev_comp.exe	$(VIS_TAB_H) 	$(U)dgn_comp.exe \
		$(U)recover.exe		$(TILEUTIL)
             @echo utilities made >$@
	     @echo utilities made.

tileutil: $(U)gif2txt.exe $(U)txt2ppm.exe
	@echo Optional tile development utilities are up to date.

#
#  Inline files :
#			Specifying the "<<" means to start an inline file.
#                 	Another "<<" at the start of a line closes the
#                 	inline file.
#
#  DO NOT INDENT THE << below!
#

$(GAMEFILE) :  $(ALLOBJ)
	@echo Linking....
	$(LINK) $(LFLAGSN) @<<$(GAME).lnk
		$(ALLOBJ)
		$(GAMEFILE)
		$(GAME)
		$(TERMLIB) $(MOVETR) $(CLIB) $(BCOVL) $(BCMDL)
<<
	@if exist $(GAMEDIR)\$(GAME).bak del $(GAMEDIR)\$(GAME).bak

#
# Makedefs Stuff
#

$(U)makedefs.exe:	$(MAKEOBJS)
	@$(LINK) $(LFLAGSU) $(MAKEOBJS), $@,, $(CLIB) $(BCMDL);

$(O)makedefs.o: $(CONFIG_H)	    $(PERMONST_H)      $(OBJCLASS_H) \
		 $(MONSYM_H)    $(QTEXT_H)	$(PATCHLEVEL_H) \
		 $(U)makedefs.c
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	@$(CC) $(CFLAGSU) $(COBJNAM)$@ $(U)makedefs.c

#
#  date.h should be remade every time any of the source or include
#  files is modified.
#

$(INCL)\date.h : $(U)makedefs.exe
	$(U)makedefs -v
	@echo A new $@ has been created.

$(INCL)\onames.h : $(U)makedefs.exe
	$(U)makedefs -o

$(INCL)\pm.h : $(U)makedefs.exe
	$(U)makedefs -p

#$(INCL)\trap.h : $(U)makedefs.exe
#	$(U)makedefs -t

$(SRC)\monstr.c: $(U)makedefs.exe
	$(U)makedefs -m

$(INCL)\vis_tab.h: $(U)makedefs.exe
	$(U)makedefs -z

$(SRC)\vis_tab.c: $(U)makedefs.exe
	$(U)makedefs -z

#
# Level Compiler Stuff
#

$(U)lev_comp.exe:  $(SPLEVOBJS)
	@echo Linking $@...
	$(LINK) $(LFLAGSU) @&&!
		$(O)stubvid.o $(O)panic.o $(O)objects.o $(O)monst.o +
		$(O)drawing.o $(O)decl.o $(O)alloc.o $(O)lev_main.o +
		$(O)lev_$(LEX).o $(O)lev_yacc.o 
		$@
		$(@B)
		$(BCMDL);
!

$(O)lev_yacc.o:  $(HACK_H)   $(SP_LEV_H) $(INCL)\lev_comp.h $(U)lev_yacc.c
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	@$(CC) $(CFLAGSU) $(COBJNAM)$@ $(U)lev_yacc.c

$(O)lev_$(LEX).o:  $(HACK_H)   $(INCL)\lev_comp.h $(SP_LEV_H) \
	$(U)lev_$(LEX).c
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSU) $(COBJNAM)$@ $(U)lev_$(LEX).c

$(O)lev_main.o:	$(U)lev_main.c $(HACK_H)   $(SP_LEV_H)
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	@$(CC) $(CFLAGSU) $(COBJNAM)$@ $(U)lev_main.c

$(U)lev_yacc.c $(INCL)\lev_comp.h : $(U)lev_comp.y
!	IF "$(DO_YACC)"=="YACC_ACT"
	   $(YACC) -d -l $(U)lev_comp.y
	   copy $(YTABC) $(U)lev_yacc.c
	   copy $(YTABH) $(INCL)\lev_comp.h
	   @del $(YTABC)
	   @del $(YTABH)
!	ELSE
	   @echo.
	   @echo $(U)lev_comp.y has changed.
	   @echo To update $(U)lev_yacc.c and $(INCL)\lev_comp.h run $(YACC).
	   @echo.
	   @echo For now, we will copy the prebuilt lev_yacc.c
	   @echo from $(SYS) to $(U)lev_yacc.c, and copy the prebuilt
	   @echo lev_comp.h from $(SYS) to $(UTIL)\lev_comp.h
	   @echo and use those.
	   @echo.
	   copy $(SYS)\lev_yacc.c $@ >nul
	   touch $@
	   copy $(SYS)\lev_comp.h $(INCL)\lev_comp.h >nul
	   touch $(INCL)\lev_comp.h
!	ENDIF

$(U)lev_$(LEX).c:  $(U)lev_comp.l
!	IF "$(DO_LEX)"=="LEX_ACT"
	   $(LEX) $(FLEXSKEL) $(U)lev_comp.l
	   copy $(LEXYYC) $@
	   @del $(LEXYYC)
!	ELSE
	   @echo.
	   @echo $(U)lev_comp.l has changed. To update $@ run $(LEX).
	   @echo.
	   @echo For now, we will copy a prebuilt lev_lex.c
	   @echo from $(SYS) to $@ and use it.
	   @echo.
	   copy $(SYS)\lev_lex.c $@ >nul
	   touch $@
!	ENDIF

#
# Dungeon Stuff
#

$(U)dgn_comp.exe: $(DGNCOMPOBJS)
    @echo Linking $@...
	$(LINK) $(LFLAGSU) @&&!
		$(O)panic.o $(O)alloc.o $(O)dgn_main.o $(O)dgn_$(LEX).o +
		$(O)dgn_yacc.o 
		$@
		$(@B)
		$(BCMDL);
!

$(O)dgn_yacc.o:	$(HACK_H)   $(DGN_FILE_H) $(INCL)\dgn_comp.h \
	$(U)dgn_yacc.c
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	@$(CC) $(CFLAGSU) $(COBJNAM)$@ $(U)dgn_yacc.c

$(O)dgn_$(LEX).o: $(HACK_H)   $(DGN_FILE_H)  $(INCL)\dgn_comp.h \
	$(U)dgn_$(LEX).c
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	@$(CC) $(CFLAGSU) $(COBJNAM)$@ $(U)dgn_$(LEX).c

$(O)dgn_main.o:	$(HACK_H) $(U)dgn_main.c
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	@$(CC) $(CFLAGSU) $(COBJNAM)$@ $(U)dgn_main.c

$(U)dgn_yacc.c $(INCL)\dgn_comp.h : $(U)dgn_comp.y
!	IF "$(DO_YACC)"=="YACC_ACT"
	   $(YACC) -d -l $(U)dgn_comp.y
	   copy $(YTABC) $(U)dgn_yacc.c
	   copy $(YTABH) $(INCL)\dgn_comp.h
	   @del $(YTABC)
	   @del $(YTABH)
!	ELSE
	   @echo.
	   @echo $(U)dgn_comp.y has changed. To update $@ and
	   @echo $(INCL)\dgn_comp.h run $(YACC).
	   @echo.
	   @echo For now, we will copy the prebuilt dgn_yacc.c from
	   @echo $(SYS) to $(U)dgn_yacc.c, and copy the prebuilt
	   @echo dgn_comp.h from $(SYS) to $(INCL)\dgn_comp.h
	   @echo and use those.
	   @echo.
	   copy $(SYS)\dgn_yacc.c $@ >nul
	   touch $@
	   copy $(SYS)\dgn_comp.h $(INCL)\dgn_comp.h >nul
	   touch $(INCL)\dgn_comp.h
!	ENDIF

$(U)dgn_$(LEX).c:  $(U)dgn_comp.l
!	IF "$(DO_LEX)"=="LEX_ACT"
	   $(LEX) $(FLEXSKEL)  $(U)dgn_comp.l
	   copy $(LEXYYC) $@
	   @del $(LEXYYC)
!	ELSE
	   @echo.
	   @echo $(U)dgn_comp.l has changed. To update $@ run $(LEX).
	   @echo.
	   @echo For now, we will copy a prebuilt dgn_lex.c
	   @echo from $(SYS) to $@ and use it.
	   @echo.
	   copy $(SYS)\dgn_lex.c $@ >nul
	   touch $@
!	ENDIF


obj.tag:
	@if not exist $(O)*.* mkdir $(OBJ)
	@echo directory $(OBJ) created
	@echo directory $(OBJ) created >$@

envchk: precomp.msg
!	IF "$(TILEGAME)"==""
	   @echo.
	   @echo NOTE: This build will NOT include tile support.
	   @echo.
!	ELSE
	   @echo.
	   @echo This build includes tile support.
	   @echo.
!	ENDIF

#
# SECONDARY TARGETS
#

#
# Header files NOT distributed in ..\include
#

$(INCL)\tile.h: $(WSHR)\tile.h
	copy $(WSHR)\tile.h $@

$(INCL)\pctiles.h: $(MSYS)\pctiles.h
	copy $(MSYS)\pctiles.h $@

$(INCL)\pcvideo.h: $(MSYS)\pcvideo.h
	copy $(MSYS)\pcvideo.h $@

$(INCL)\portio.h: $(MSYS)\portio.h
	copy $(MSYS)\portio.h $@

#
#  Recover Utility
#

$(U)recover.exe: $(RECOVOBJS)
	@$(LINK) $(LFLAGSU) $(RECOVOBJS),$@,, $(CLIB) $(BCMDL);

#
#  Tile Mapping
#

$(SRC)\tile.c: $(U)tilemap.exe
	@echo A new $@ is being created.
	@$(U)tilemap

$(U)tilemap.exe: $(O)tilemap.o
	@$(LINK) $(LFLAGSU) $(O)tilemap.o,$@,, $(CLIB) $(BCMDL);

$(O)tilemap.o:  $(WSHR)\tilemap.c $(HACK_H)
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSU) $(COBJNAM)$@ $(WSHR)\tilemap.c


#
# Tile Utilities
#

#
#  Optional (for development)
#



#

$(U)gif2txt.exe: $(GIFREADERS) $(TEXT_IO)
	@$(LINK) $(LFLAGSU) << $(@B).lnk
		$(GIFREADERS) $(TEXT_IO)
		$@,,$(CLIB) $(BCMDL)
<<

$(U)txt2ppm.exe: $(PPMWRITERS) $(TEXT_IO)
	@$(LINK) $(LFLAGSU) << $(@B).lnk
		$(PPMWRITERS) $(TEXT_IO)
		$@,,$(CLIB) $(BCMDL);
<<

$(U)gif2txt2.exe: $(GIFREAD2) $(TEXT_IO2)
	@$(LINK) $(LFLAGSU) << $(@B).lnk
		$(GIFREAD2) $(TEXT_IO2)
		$@,,$(CLIB) $(BCMDL);
<<

$(U)txt2ppm2.exe: $(PPMWRIT2) $(TEXT_IO2)
	@$(LINK) $(LFLAGSU) << $(@B).lnk
		$(PPMWRIT2) $(TEXT_IO2)
		$@,,$(CLIB) $(BCMDL);
<<

#
#  Required for tile support
#

NetHack1.tib: $(TILEFILES) $(U)tile2bin.exe
	@echo Creating binary tile files (this may take some time)
	@$(U)tile2bin

NetHackO.tib: thintile.tag $(TILEFILES2) $(U)til2bin2.exe
	@echo Creating overview binary tile files (this may take some time)
	@$(U)til2bin2

thintile.tag: $(U)thintile.exe $(TILEFILES)
	$(U)thintile
	@echo thintiles created >thintile.tag

$(U)tile2bin.exe: $(O)tile2bin.o $(TEXT_IO)
    @echo Linking $@...
	$(LINK) $(LFLAGSU) @&&!
		$(O)tile2bin.o+
		$(O)stubvid.o $(O)objects.o $(O)monst.o $(O)decl.o +
		$(O)drawing.o $(O)tiletxt.o $(O)tiletext.o 
		$@
		$(@B)
		$(BCMDL);
!

$(U)til2bin2.exe: $(O)til2bin2.o $(TEXT_IO2)
    @echo Linking $@...
	$(LINK) $(LFLAGSU) @&&!
		$(O)til2bin2.o+
		$(O)stubvid.o $(O)objects.o $(O)monst.o $(O)decl.o +
		$(O)drawing.o $(O)tiletxt2.o $(O)tiletex2.o 
		$@
		$(@B)
		$(BCMDL);
!


$(U)thintile.exe: $(O)thintile.o
	@$(LINK) $(LFLAGSU) $(O)thintile.o,$@,, $(CLIB) $(BCMDL);

$(O)thintile.o:  $(HACK_H) $(INCL)\tile.h $(WSHR)\thintile.c
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSU) $(COBJNAM)$@ $(WSHR)\thintile.c

$(O)tile2bin.o:  $(HACK_H) $(TILE_H) $(PCVIDEO_H)
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSU) $(COBJNAM)$@ $(MSYS)\tile2bin.c

$(O)til2bin2.o:  $(HACK_H) $(TILE_H) $(PCVIDEO_H)
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSU) $(CDEFINE)TILE_X=8 $(CDEFINE)OVERVIEW_FILE \
		$(COBJNAM)$@ $(MSYS)\tile2bin.c


#
# DLB stuff
#

nhdat:	$(U)dlb_main.exe
	@copy $(MSYS)\msdoshlp.txt $(DAT)
	@cd $(DAT)
	@echo data >dlb.lst
	@echo oracles >>dlb.lst
	@echo options >>dlb.lst
	@echo quest.dat >>dlb.lst
	@echo rumors >>dlb.lst
	@echo help >>dlb.lst
	@echo hh >>dlb.lst
	@echo cmdhelp >>dlb.lst
	@echo history >>dlb.lst
	@echo opthelp >>dlb.lst
	@echo wizhelp >>dlb.lst
	@echo dungeon >>dlb.lst
	@echo license >>dlb.lst
	@echo msdoshlp.txt >>dlb.lst
	@for %%N in (*.lev) do echo %%N >>dlb.lst
	$(U)dlb_main cvIf dlb.lst $(SRC)\nhdat
	@cd $(SRC)

$(U)dlb_main.exe: $(DLBOBJS)
	@$(LINK) $(LFLAGSU) $(DLBOBJS),$@,, $(CLIB) $(BCMDL);

$(O)dlb_main.o: $(U)dlb_main.c $(INCL)\config.h $(DLB_H)
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSU) $(COBJNAM)$@ $(U)dlb_main.c

#
# Housekeeping
#

spotless: clean
	rmdir $(OBJ)
	if exist $(DATE_H)    del $(DATE_H)
	if exist $(INCL)\onames.h  del $(INCL)\onames.h
	if exist $(INCL)\pm.h      del $(INCL)\pm.h
	if exist $(VIS_TAB_H) del $(VIS_TAB_H)
	if exist $(SRC)\vis_tab.c  del $(SRC)\vis_tab.c
	if exist $(SRC)\tile.c     del $(SRC)\tile.c
	if exist $(DAT)\rumors     del $(DAT)\rumors
	if exist $(DAT)\data		del $(DAT)\data
	if exist $(DAT)\dungeon		del $(DAT)\dungeon
	if exist $(DAT)\dungeon.pdf	del $(DAT)\dungeon.pdf
	if exist $(DAT)\options		del $(DAT)\options
	if exist $(DAT)\oracles		del $(DAT)\oracles
	if exist $(DAT)\rumors		del $(DAT)\rumors
	if exist $(DAT)\quest.dat	del $(DAT)\quest.dat
	if exist $(DAT)\*.lev		del $(DAT)\*.lev
	if exist $(DAT)\sp_lev.tag	del $(DAT)\sp_lev.tag
	if exist $(SRC)\monstr.c        del $(SRC)\monstr.c
	if exist $(SRC)\vis_tab.c       del $(SRC)\vis_tab.c
	if exist $(SRC)\$(PLANAR_TIB)   del $(SRC)\$(PLANAR_TIB)
	if exist $(SRC)\$(OVERVIEW_TIB) del $(SRC)\$(OVERVIEW_TIB)
	if exist $(U)recover.exe        del $(U)recover.exe

clean:
	if exist $(O)*.o del $(O)*.o
	if exist $(O)*.0 del $(O)*.0
	if exist $(O)*.1 del $(O)*.1
	if exist $(O)*.2 del $(O)*.2
	if exist $(O)*.3 del $(O)*.3
	if exist $(O)*.b del $(O)*.b
	if exist $(U)utility.tag   del $(U)utility.tag
	if exist $(U)makedefs.exe  del $(U)makedefs.exe
	if exist $(U)lev_comp.exe  del $(U)lev_comp.exe
	if exist $(U)dgn_comp.exe  del $(U)dgn_comp.exe
	if exist $(U)dlb_main.exe  del $(U)dlb_main.exe
	if exist $(SRC)\*.lnk      del $(SRC)\*.lnk
	if exist $(SRC)\*.map      del $(SRC)\*.map
	if exist $(SRC)\*$(CPCHEXT) del $(SRC)\*$(CPCHEXT)
	if exist $(SRC)\*.cfg      del $(SRC)\*.cfg
	if exist $(DAT)\dlb.lst    del $(DAT)\dlb.lst

pch.c:	$(HACK_H)
	@echo ^#include "hack.h" > $@
	@echo main(int argc, char *argv[]) >> $@
	@echo { >> $@
	@echo } >> $@
	@echo. >> $@

#
# OTHER DEPENDENCIES
#

#
# Precompiled Header dependencies
# (We need to force the generation of these at the beginning)
#

PHO$(CPCHEXT): $(HACK_H) pch.c
	@echo Generating new precompiled header for .O files
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGCO) >> $(VROOMMCFG)
	@$(CC) $(FLAGCO) pch.c
PH0$(CPCHEXT): $(HACK_H) pch.c
	@echo Generating new precompiled header for .0 files
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGC0) >> $(VROOMMCFG)
	@$(CC) $(FLAGC0) pch.c
PH1$(CPCHEXT): $(HACK_H) pch.c
	@echo Generating new precompiled header for .1 files
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGC1) >> $(VROOMMCFG)
	@$(CC) $(FLAGC1) pch.c
PH2$(CPCHEXT): $(HACK_H) pch.c
	@echo Generating new precompiled header for .2 files
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGC2) >> $(VROOMMCFG)
	@$(CC) $(FLAGC2) pch.c
PH3$(CPCHEXT): $(HACK_H) pch.c
	@echo Generating new precompiled header for .3 files
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGC3) >> $(VROOMMCFG)
	@$(CC) $(FLAGC3) pch.c
PHB$(CPCHEXT): $(HACK_H) pch.c
	@echo Generating new precompiled header for .B files
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGCB) >> $(VROOMMCFG)
	@$(CC) $(FLAGCB) pch.c


# Overlay initialization routines used by pcmain() at startup to
# determine EMS/XMS memory usage.

# Comment out the following line if you don't want Borland C++ to check for
# extended memory.
RECOGNIZE_XMS = $(CDEFINE)RECOGNIZE_XMS


$(O)ovlinit.o: $(MSYS)\ovlinit.c $(HACK_H)
	@type schema$(SCHEMA).bc | find "$(@B)_o" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSN) $(RECOGNIZE_XMS) $(COBJNAM)$@ $(MSYS)\ovlinit.c

#
# dat dependencies
#

$(DAT)\data: $(U)utility.tag    $(DATABASE)
	$(U)makedefs -d

$(DAT)\rumors: $(U)utility.tag    $(DAT)\rumors.tru   $(DAT)\rumors.fal
	$(U)makedefs -r

$(DAT)\quest.dat: $(U)utility.tag  $(DAT)\quest.txt
	$(U)makedefs -q

$(DAT)\oracles: $(U)utility.tag    $(DAT)\oracles.txt
	$(U)makedefs -h

$(DAT)\dungeon: $(U)utility.tag  $(DAT)\dungeon.def
	$(U)makedefs -e
	cd $(DAT)
	$(U)dgn_comp dungeon.pdf
	cd $(SRC)

#
#  Util Dependencies.
#

$(O)panic.o:   $(U)panic.c $(CONFIG_H)
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSU) $(COBJNAM)$@ $(U)panic.c

$(O)recover.o: $(CONFIG_H) $(U)recover.c
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSU) $(COBJNAM)$@ $(U)recover.c

#
#  from win\share
#

$(O)tiletxt.o:  $(WSHR)\tilemap.c $(HACK_H)
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSU) $(CDEFINE)TILETEXT $(COBJNAM)$@ $(WSHR)\tilemap.c

$(O)tiletxt2.o:  $(WSHR)\tilemap.c $(HACK_H)
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSU) $(CDEFINE)TILETEXT \
		$(CDEFINE)TILE_X=8 $(COBJNAM)$@ $(WSHR)\tilemap.c

$(O)gifread.o:  $(WSHR)\gifread.c  $(CONFIG_H) $(INCL)\tile.h
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSU) $(COBJNAM)$@ $(WSHR)\gifread.c

$(O)gifread2.o:  $(WSHR)\gifread.c  $(CONFIG_H) $(INCL)\tile.h
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSU) $(COBJNAM)$@ $(CDEFINE)TILE_X=8 $(WSHR)\gifread.c

$(O)ppmwrite.o: $(WSHR)\ppmwrite.c $(CONFIG_H) $(INCL)\tile.h
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSU) $(COBJNAM)$@ $(WSHR)\ppmwrite.c

$(O)ppmwrit2.o: $(WSHR)\ppmwrite.c $(CONFIG_H) $(INCL)\tile.h
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSU) $(COBJNAM)$@ $(CDEFINE)TILE_X=8 $(WSHR)\ppmwrite.c

$(O)tiletext.o:   $(WSHR)\tiletext.c  $(CONFIG_H) $(INCL)\tile.h
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSU) $(COBJNAM)$@ $(WSHR)\tiletext.c

$(O)tiletex2.o:   $(WSHR)\tiletext.c  $(CONFIG_H) $(INCL)\tile.h
	@echo $(BCOPTS1) > $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSU) $(CDEFINE)TILE_X=8 $(COBJNAM)$@ $(WSHR)\tiletext.c

#
#  from win\tty
#

$(O)getline.1:  $(PCH1) $(WTTY)\getline.c  $(HACK_H) $(WINTTY_H) $(FUNC_TAB_H)
	@type schema$(SCHEMA).bc | find "$(@B)_1" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU1) >> $(VROOMMCFG)
	$(CC) $(FLAGU1) $(COBJNAM)$@ $(WTTY)\getline.c

$(O)getline.2:  $(PCH2) $(WTTY)\getline.c  $(HACK_H) $(WINTTY_H) $(FUNC_TAB_H)
	@type schema$(SCHEMA).bc | find "$(@B)_2" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU2) >> $(VROOMMCFG)
	$(CC) $(FLAGU2) $(COBJNAM)$@ $(WTTY)\getline.c

$(O)termcap.0:  $(PCH0) $(WTTY)\termcap.c  $(HACK_H) $(WINTTY_H) $(TERMCAP_H)
	@type schema$(SCHEMA).bc | find "$(@B)_0" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU0) >> $(VROOMMCFG)
	$(CC) $(FLAGU0) $(COBJNAM)$@ $(WTTY)\termcap.c

$(O)termcap.1:  $(PCH1) $(WTTY)\termcap.c  $(HACK_H) $(WINTTY_H) $(TERMCAP_H)
	@type schema$(SCHEMA).bc | find "$(@B)_1" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU1) >> $(VROOMMCFG)
	$(CC) $(FLAGU1) $(COBJNAM)$@ $(WTTY)\termcap.c

$(O)termcap.B:  $(PCHB) $(WTTY)\termcap.c  $(HACK_H) $(WINTTY_H) $(TERMCAP_H)
	@type schema$(SCHEMA).bc | find "$(@B)_b" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGUB) >> $(VROOMMCFG)
	$(CC) $(FLAGUB) $(COBJNAM)$@ $(WTTY)\termcap.c

$(O)topl.1:     $(PCH1) $(WTTY)\topl.c     $(HACK_H) $(TERMCAP_H) $(WINTTY_H)
	@type schema$(SCHEMA).bc | find "$(@B)_1" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU1) >> $(VROOMMCFG)
	$(CC) $(FLAGU1) $(COBJNAM)$@ $(WTTY)\topl.c

$(O)topl.2:     $(PCH2) $(WTTY)\topl.c     $(HACK_H) $(TERMCAP_H) $(WINTTY_H)
	@type schema$(SCHEMA).bc | find "$(@B)_2" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU2) >> $(VROOMMCFG)
	$(CC) $(FLAGU2) $(COBJNAM)$@ $(WTTY)\topl.c

$(O)topl.B:     $(PCHB) $(WTTY)\topl.c     $(HACK_H) $(TERMCAP_H) $(WINTTY_H)
	@type schema$(SCHEMA).bc | find "$(@B)_b" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGUB) >> $(VROOMMCFG)
	$(CC) $(FLAGUB) $(COBJNAM)$@ $(WTTY)\topl.c

$(O)wintty.o: $(PCHO) $(CONFIG_H) $(WTTY)\wintty.c $(PATCHLEVEL_H) $(DATE_H)
	@type schema$(SCHEMA).bc | find "$(@B)_o" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGUO) >> $(VROOMMCFG)
	$(CC) $(FLAGUO) $(COBJNAM)$@ $(WTTY)\wintty.c

#
# from sys\share
#

$(O)pcmain.0:   $(PCH0) $(HACK_H) $(SYS)\pcmain.c
	@type schema$(SCHEMA).bc | find "$(@B)_0" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU0) >> $(VROOMMCFG)
	$(CC)  $(FLAGU0) $(COBJNAM)$@ $(SYS)\pcmain.c

$(O)pcmain.1:   $(PCH1) $(HACK_H) $(SYS)\pcmain.c
	@type schema$(SCHEMA).bc | find "$(@B)_1" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU1) >> $(VROOMMCFG)
	$(CC)  $(FLAGU1) $(COBJNAM)$@ $(SYS)\pcmain.c

$(O)pcmain.B:   $(PCHB) $(HACK_H) $(SYS)\pcmain.c
	@type schema$(SCHEMA).bc | find "$(@B)_b" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGUB) >> $(VROOMMCFG)
	$(CC)  $(FLAGUB) $(COBJNAM)$@ $(SYS)\pcmain.c

$(O)pcunix.B:   $(PCHB) $(SYS)\pcunix.c   $(HACK_H)
	@type schema$(SCHEMA).bc | find "$(@B)_b" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGUB) >> $(VROOMMCFG)
	$(CC) $(FLAGUB) $(COBJNAM)$@ $(SYS)\pcunix.c

$(O)tty.o:     $(HACK_H) $(WINTTY_H) $(SYS)\pctty.c
	@type schema$(SCHEMA).bc | find "$(@B)_o" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC)  $(CFLAGSN) $(COBJNAM)$@  $(SYS)\pctty.c

$(O)pcsys.o:    $(HACK_H) $(SYS)\pcsys.c
	@type schema$(SCHEMA).bc | find "$(@B)_o" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC)  $(CFLAGSN) $(COBJNAM)$@ $(SYS)\pcsys.c

$(O)random.o: $(PCHO) $(HACK_H) $(SYS)\random.c
	@type schema$(SCHEMA).bc | find "$(@B)_o" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGUO) >> $(VROOMMCFG)
	$(CC) $(FLAGUO) $(COBJNAM)$@ $(SYS)\random.c

#
# from sys\msdos
#

$(O)msdos.0: $(MSYS)\msdos.c   $(HACK_H) $(PCVIDEO_H)
	@type schema$(SCHEMA).bc | find "$(@B)_0" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSN) $(COVL0) $(COBJNAM)$@ $(MSYS)\msdos.c

$(O)msdos.B: $(MSYS)\msdos.c   $(HACK_H) $(PCVIDEO_H)
	@type schema$(SCHEMA).bc | find "$(@B)_b" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2)  >> $(VROOMMCFG)
	$(CC) $(CFLAGSN) $(COVLB) $(COBJNAM)$@ $(MSYS)\msdos.c

$(O)pctiles.0: $(PCH0) $(MSYS)\pctiles.c $(HACK_H) $(TILE_H) $(PCVIDEO_H)
	@type schema$(SCHEMA).bc | find "$(@B)_0" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU0) >> $(VROOMMCFG)
	$(CC) $(FLAGU0) $(COBJNAM)$@ $(MSYS)\pctiles.c

$(O)pctiles.B: $(PCHB) $(MSYS)\pctiles.c $(HACK_H) $(TILE_H) $(PCVIDEO_H)
	@type schema$(SCHEMA).bc | find "$(@B)_b" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGUB) >> $(VROOMMCFG)
	$(CC) $(FLAGUB) $(COBJNAM)$@ $(MSYS)\pctiles.c

$(O)sound.o: $(PCH0) $(MSYS)\sound.c   $(HACK_H) $(INCL)\portio.h
	@type schema$(SCHEMA).bc | find "$(@B)_o" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGUO) >> $(VROOMMCFG)
	$(CC) $(FLAGUO) $(COBJNAM)$@ $(MSYS)\sound.c

$(O)pckeys.o: $(PCHO) $(MSYS)\pckeys.c   $(HACK_H) $(PCVIDEO_H)
	@type schema$(SCHEMA).bc | find "$(@B)_o" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGUO) >> $(VROOMMCFG)
	$(CC) $(FLAGUO) $(COBJNAM)$@ $(MSYS)\pckeys.c

$(O)stubvid.o : $(MSYS)\video.c $(HACK_H)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGUO) >> $(VROOMMCFG)
	$(CC) $(FLAGUO) $(CDEFINE)STUBVIDEO $(COBJNAM)$@ $(MSYS)\video.c

$(O)video.0: $(PCH0) $(MSYS)\video.c   $(HACK_H) $(WINTTY_H) $(PCVIDEO_H) \
                $(TILE_H)
	@type schema$(SCHEMA).bc | find "$(@B)_0" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU0) >> $(VROOMMCFG)
	$(CC) $(FLAGU0) $(COBJNAM)$@ $(MSYS)\video.c

$(O)video.1: $(PCH1) $(MSYS)\video.c   $(HACK_H) $(WINTTY_H) $(PCVIDEO_H) \
                $(TILE_H)
	@type schema$(SCHEMA).bc | find "$(@B)_1" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU1) >> $(VROOMMCFG)
	$(CC) $(FLAGU1) $(COBJNAM)$@ $(MSYS)\video.c

$(O)video.B: $(PCHB) $(MSYS)\video.c   $(HACK_H) $(WINTTY_H) $(PCVIDEO_H) \
                $(TILE_H)
	@type schema$(SCHEMA).bc | find "$(@B)_b" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGUB) >> $(VROOMMCFG)
	$(CC) $(FLAGUB) $(COBJNAM)$@ $(MSYS)\video.c

$(O)vidtxt.0: $(MSYS)\vidtxt.c  $(HACK_H) $(WINTTY_H) $(PCVIDEO_H)
	@type schema$(SCHEMA).bc | find "$(@B)_0" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSN) $(COVL0) $(COBJNAM)$@ $(MSYS)\vidtxt.c

$(O)vidtxt.B: $(MSYS)\vidtxt.c  $(HACK_H) $(WINTTY_H) $(PCVIDEO_H)
	@type schema$(SCHEMA).bc | find "$(@B)_b" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSN) $(COVLB) $(COBJNAM)$@ $(MSYS)\vidtxt.c

$(O)vidvga.0: $(PCH0) $(MSYS)\vidvga.c  $(HACK_H) $(WINTTY_H) $(PCVIDEO_H) \
		$(TILE_H)
	@type schema$(SCHEMA).bc | find "$(@B)_0" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU0) >> $(VROOMMCFG)
	$(CC) $(FLAGU0) $(COBJNAM)$@ $(MSYS)\vidvga.c

$(O)vidvga.1: $(PCH1) $(MSYS)\vidvga.c  $(HACK_H) $(WINTTY_H) $(PCVIDEO_H) \
		$(TILE_H)
	@type schema$(SCHEMA).bc | find "$(@B)_1" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU1) >> $(VROOMMCFG)
	$(CC) $(FLAGU1) $(COBJNAM)$@ $(MSYS)\vidvga.c

$(O)vidvga.2: $(PCH2) $(MSYS)\vidvga.c  $(HACK_H) $(WINTTY_H) $(PCVIDEO_H) \
		$(TILE_H)
	@type schema$(SCHEMA).bc | find "$(@B)_2" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGU2) >> $(VROOMMCFG)
	$(CC) $(FLAGU2) $(COBJNAM)$@ $(MSYS)\vidvga.c

$(O)vidvga.B: $(PCHB) $(MSYS)\vidvga.c  $(HACK_H) $(WINTTY_H) $(PCVIDEO_H) \
		$(TILE_H)
	@type schema$(SCHEMA).bc | find "$(@B)_b" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) $(CFLAGUB) >> $(VROOMMCFG)
	$(CC) $(FLAGUB) $(COBJNAM)$@ $(MSYS)\vidvga.c

#
# from src
#

$(O)alloc.o:     $(SRC)\alloc.c    $(CONFIG_H)
	@type schema$(SCHEMA).bc | find "$(@B)_o" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSN) $(COBJNAM)$@ $(SRC)\alloc.c
$(O)ball.o:      $(PCHO) $(SRC)\ball.c     $(HACK_H)
$(O)bones.o:     $(PCHO) $(SRC)\bones.c    $(HACK_H) $(LEV_H)
$(O)decl.o:      $(PCHO) $(SRC)\decl.c     $(HACK_H) $(QUEST_H)
$(O)detect.o:    $(PCHO) $(SRC)\detect.c   $(HACK_H) $(ARTIFACT_H)
$(O)dig.o:	 $(PCHO) $(SRC)\dig.c	   $(HACK_H) # check dep
$(O)display.o:	 $(PCHO) $(SRC)\display.c  $(HACK_H)
$(O)dlb.o:	 $(SRC)\dlb.c	   $(DLB_H) $(HACK_H)
	@type schema$(SCHEMA).bc | find "$(@B)_o" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSN) $(COBJNAM)$@ $(SRC)\dlb.c
$(O)dokick.o:    $(PCHO) $(SRC)\dokick.c   $(HACK_H)
$(O)dothrow.o:   $(PCHO) $(SRC)\dothrow.c  $(HACK_H)
$(O)drawing.o:   $(SRC)\drawing.c  $(HACK_H) $(TERMCAP_H)
	@type schema$(SCHEMA).bc | find "$(@B)_o" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSN) $(COBJNAM)$@ $(SRC)\drawing.c
$(O)end.o:       $(SRC)\end.c      $(HACK_H) $(LEV_H) $(DLB_H)
	@type schema$(SCHEMA).bc | find "$(@B)_o" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSN) $(COBJNAM)$@ $(SRC)\end.c
$(O)exper.o:     $(PCHO) $(SRC)\exper.c    $(HACK_H)
$(O)extralev.o:  $(PCHO) $(SRC)\extralev.c $(HACK_H)
$(O)files.o:	 $(PCHO) $(SRC)\files.c    $(HACK_H) $(DLB_H)
$(O)fountain.o:  $(PCHO) $(SRC)\fountain.c $(HACK_H)
$(O)mapglyph.o:  $(PCHO) $(SRC)\mapglyph.c $(HACK_H)
$(O)minion.o:    $(PCHO) $(SRC)\minion.c   $(HACK_H)
$(O)mklev.o:     $(PCHO) $(SRC)\mklev.c    $(HACK_H)
$(O)mkmap.o:     $(PCHO) $(SRC)\mkmap.c    $(HACK_H) $(SP_LEV_H)
$(O)mkmaze.o:	 $(PCHO) $(SRC)\mkmaze.c   $(HACK_H) $(SP_LEV_H) $(LEV_H)
$(O)monst.o:     $(SRC)\monst.c    $(CONFIG_H) $(PERMONST_H) $(MONSYM_H) \
		 $(COLOR_H) $(ALIGN_H)
	@type schema$(SCHEMA).bc | find "$(@B)_o" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSN) $(COBJNAM)$@ $(SRC)\monst.c
$(O)monstr.o:    $(SRC)\monstr.c   $(CONFIG_H)
	@type schema$(SCHEMA).bc | find "$(@B)_o" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSN) $(COBJNAM)$@ $(SRC)\monstr.c
$(O)mplayer.o:   $(PCHO) $(SRC)\mplayer.c  $(HACK_H)
$(O)muse.o:      $(PCHO) $(SRC)\muse.c     $(HACK_H)
$(O)music.o:     $(PCHO) $(SRC)\music.c    $(HACK_H)
$(O)o_init.o:	 $(PCHO) $(SRC)\o_init.c   $(HACK_H) $(LEV_H)
$(O)objects.o:   $(SRC)\objects.c  $(CONFIG_H) $(OBJ_H) $(OBJCLASS_H) \
                 $(PROP_H) $(COLOR_H)
	@type schema$(SCHEMA).bc | find "$(@B)_o" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSN) $(COBJNAM)$@ $(SRC)\objects.c
$(O)options.o:	 $(SRC)\options.c  $(HACK_H) $(TERMCAP_H) $(OBJCLASS_H)
	@type schema$(SCHEMA).bc | find "$(@B)_o" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSN) $(COBJNAM)$@ $(SRC)\options.c
$(O)pager.o:	 $(SRC)\pager.c    $(HACK_H) $(DLB_H)
	@type schema$(SCHEMA).bc | find "$(@B)_o" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGNO) $(COBJNAM)$@ $(SRC)\pager.c
$(O)pickup.o:    $(PCHO) $(SRC)\pickup.c   $(HACK_H)
$(O)pray.o:      $(PCHO) $(SRC)\pray.c     $(HACK_H)
$(O)quest.o:     $(PCHO) $(SRC)\quest.c    $(HACK_H) $(QUEST_H) $(QTEXT_H)
$(O)questpgr.o:  $(PCHO) $(SRC)\questpgr.c $(HACK_H) $(QTEXT_H) $(DLB_H)
$(O)rect.o:      $(PCHO) $(SRC)\rect.c     $(HACK_H)
$(O)region.o:    $(PCHO) $(SRC)\region.c   $(HACK_H)
$(O)restore.o:   $(PCHO) $(SRC)\restore.c  $(HACK_H) $(LEV_H) $(TERMCAP_H) \
		 $(QUEST_H)
$(O)rip.o:       $(PCHO) $(SRC)\rip.c      $(HACK_H)
$(O)role.o:	   $(PCHO) $(SRC)\role.c     $(HACK_H)
$(O)rumors.o:	 $(PCHO) $(SRC)\rumors.c   $(HACK_H) $(DLB_H)
$(O)save.o:      $(PCHO) $(SRC)\save.c     $(HACK_H) $(LEV_H) $(QUEST_H)
$(O)sit.o:       $(PCHO) $(SRC)\sit.c      $(HACK_H) $(ARTIFACT_H)
$(O)steed.o:	   $(PCHO) $(SRC)\steed.c    $(HACK_H)
$(O)sys.o:	 $(PCHO) $(SRC)\sys.c      $(HACK_H)
$(O)sp_lev.o:	 $(PCHO) $(SRC)\sp_lev.c   $(HACK_H) $(SP_LEV_H) $(DLB_H)
$(O)spell.o:     $(PCHO) $(SRC)\spell.c    $(HACK_H)
$(O)teleport.o:  $(PCHO) $(SRC)\teleport.c $(HACK_H)	# check dep
$(O)tile.o:      $(PCHO) $(SRC)\tile.c     $(HACK_H)
$(O)topten.o:	 $(PCHO) $(SRC)\topten.c   $(HACK_H) $(DLB_H) $(PATCHLEVEL_H)
$(O)u_init.o:    $(PCHO) $(SRC)\u_init.c   $(HACK_H)
$(O)uhitm.o:     $(PCHO) $(SRC)\uhitm.c    $(HACK_H)
$(O)version.o:   $(PCHO) $(SRC)\version.c  $(HACK_H) $(PATCHLEVEL_H)
$(O)vision.o:    $(PCHO) $(SRC)\vision.c   $(HACK_H) $(VIS_TAB_H)
$(O)vis_tab.o:   $(SRC)\vis_tab.c  $(HACK_H) $(VIS_TAB_H)
	@type schema$(SCHEMA).bc | find "$(@B)_o" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSN) $(COBJNAM)$@ $(SRC)\vis_tab.c
$(O)wield.o:     $(PCHO) $(SRC)\wield.c    $(HACK_H)
$(O)windows.o:   $(PCHO) $(SRC)\windows.c  $(HACK_H) $(WINTTY_H)
$(O)worm.o:      $(PCHO) $(SRC)\worm.c     $(HACK_H) $(LEV_H)
$(O)worn.o:      $(PCHO) $(SRC)\worn.c     $(HACK_H)
$(O)write.o:     $(PCHO) $(SRC)\write.c    $(HACK_H)

#
# Overlays
#

# OVL0
#

$(O)allmain.0:  $(PCH0) $(SRC)\allmain.c  $(HACK_H)
$(O)apply.0:    $(PCH0) $(SRC)\apply.c    $(HACK_H)
$(O)artifact.0: $(PCH0) $(SRC)\artifact.c $(HACK_H) $(ARTIFACT_H) $(ARTILIST_H)
$(O)attrib.0:   $(PCH0) $(SRC)\attrib.c   $(HACK_H)
$(O)botl.0:     $(PCH0) $(SRC)\botl.c     $(HACK_H)
$(O)cmd.0:      $(PCH0) $(SRC)\cmd.c      $(HACK_H) $(FUNC_TAB_H)
$(O)dbridge.0:  $(PCH0) $(SRC)\dbridge.c  $(HACK_H)
$(O)do.0:       $(PCH0) $(SRC)\do.c       $(HACK_H) $(LEV_H)
$(O)do_name.0:  $(PCH0) $(SRC)\do_name.c  $(HACK_H)
$(O)do_wear.0:  $(PCH0) $(SRC)\do_wear.c  $(HACK_H)
$(O)dogmove.0:  $(PCH0) $(SRC)\dogmove.c  $(HACK_H) $(MFNDPOS_H)
$(O)dungeon.0:	$(PCH0) $(SRC)\dungeon.c  $(HACK_H) $(ALIGN_H) $(DGN_FILE_H) \
		$(DLB_H)
$(O)eat.0:      $(PCH0) $(SRC)\eat.c      $(HACK_H)
$(O)engrave.0:  $(PCH0) $(SRC)\engrave.c  $(HACK_H) $(LEV_H)
$(O)explode.0:  $(PCH0) $(SRC)\explode.c  $(HACK_H)
$(O)hacklib.0:  $(PCH0) $(SRC)\hacklib.c  $(HACK_H)
$(O)invent.0:   $(PCH0) $(SRC)\invent.c   $(HACK_H) $(ARTIFACT_H)
$(O)lock.0:     $(PCH0) $(SRC)\lock.c     $(HACK_H)
$(O)mail.0:     $(PCH0) $(SRC)\mail.c     $(HACK_H) $(MAIL_H) $(DATE_H)
$(O)makemon.0:  $(PCH0) $(SRC)\makemon.c  $(HACK_H)
$(O)mcastu.0:   $(PCH0) $(SRC)\mcastu.c   $(HACK_H)
$(O)mhitm.0:    $(PCH0) $(SRC)\mhitm.c    $(HACK_H) $(ARTIFACT_H)
$(O)mhitu.0:    $(PCH0) $(SRC)\mhitu.c    $(HACK_H) $(ARTIFACT_H)
$(O)mkobj.0:    $(PCH0) $(SRC)\mkobj.c    $(HACK_H) $(ARTIFACT_H) $(PROP_H)
$(O)mkroom.0:   $(PCH0) $(SRC)\mkroom.c   $(HACK_H)
$(O)mon.0:      $(PCH0) $(SRC)\mon.c      $(HACK_H) $(MFNDPOS_H)
$(O)mondata.0:  $(PCH0) $(SRC)\mondata.c  $(HACK_H)
$(O)monmove.0:  $(PCH0) $(SRC)\monmove.c  $(HACK_H) $(MFNDPOS_H) $(ARTIFACT_H)
$(O)mthrowu.0:  $(PCH0) $(SRC)\mthrowu.c  $(HACK_H)
$(O)objnam.0:   $(PCH0) $(SRC)\objnam.c   $(HACK_H)
$(O)polyself.0: $(PCH0) $(SRC)\polyself.c $(HACK_H)
$(O)priest.0:   $(PCH0) $(SRC)\priest.c   $(HACK_H) $(MFNDPOS_H)
$(O)rnd.0:      $(PCH0) $(SRC)\rnd.c      $(HACK_H)
$(O)shk.0:      $(PCH0) $(SRC)\shk.c      $(HACK_H)
$(O)shknam.0:   $(PCH0) $(SRC)\shknam.c   $(HACK_H)
$(O)sounds.0:   $(PCH0) $(SRC)\sounds.c   $(HACK_H)
$(O)steal.0:    $(PCH0) $(SRC)\steal.c    $(HACK_H)
$(O)timeout.0:	$(PCH0) $(SRC)\timeout.c  $(HACK_H) $(LEV_H)
$(O)track.0:    $(PCH0) $(SRC)\track.c    $(HACK_H)
$(O)trap.0:     $(PCH0) $(SRC)\trap.c     $(HACK_H)
$(O)vault.0:    $(PCH0) $(SRC)\vault.c    $(HACK_H)
$(O)weapon.0:   $(PCH0) $(SRC)\weapon.c   $(HACK_H)
$(O)were.0:     $(PCH0) $(SRC)\were.c     $(HACK_H)
$(O)wizard.0:   $(PCH0) $(SRC)\wizard.c   $(HACK_H) $(QTEXT_H)
$(O)zap.0:      $(PCH0) $(SRC)\zap.c      $(HACK_H)

#
# OVL1
#

$(O)allmain.1:  $(PCH1) $(SRC)\allmain.c  $(HACK_H)
$(O)apply.1:    $(PCH1) $(SRC)\apply.c    $(HACK_H)
$(O)artifact.1: $(PCH1) $(SRC)\artifact.c $(HACK_H) $(ARTIFACT_H) $(ARTILIST_H)
$(O)attrib.1:   $(PCH1) $(SRC)\attrib.c   $(HACK_H)
$(O)botl.1:     $(PCH1) $(SRC)\botl.c     $(HACK_H)
$(O)cmd.1:      $(PCH1) $(SRC)\cmd.c      $(HACK_H) $(FUNC_TAB_H)
$(O)dbridge.1:  $(PCH1) $(SRC)\dbridge.c  $(HACK_H)
$(O)do.1:       $(PCH1) $(SRC)\do.c       $(HACK_H) $(LEV_H)
$(O)do_wear.1:  $(PCH1) $(SRC)\do_wear.c  $(HACK_H)
$(O)dog.1:      $(PCH1) $(SRC)\dog.c      $(HACK_H)
$(O)dungeon.1:	$(PCH1) $(SRC)\dungeon.c  $(HACK_H) $(ALIGN_H) $(DGN_FILE_H) $(DLB_H)
$(O)eat.1:      $(PCH1) $(SRC)\eat.c      $(HACK_H)
$(O)engrave.1:  $(PCH1) $(SRC)\engrave.c  $(HACK_H) $(LEV_H)
$(O)explode.1:  $(PCH1) $(SRC)\explode.c  $(HACK_H)
$(O)hack.1:     $(PCH1) $(SRC)\hack.c     $(HACK_H)
$(O)hacklib.1:  $(PCH1) $(SRC)\hacklib.c  $(HACK_H)
$(O)invent.1:   $(PCH1) $(SRC)\invent.c   $(HACK_H) $(ARTIFACT_H)
$(O)makemon.1:  $(PCH1) $(SRC)\makemon.c  $(HACK_H)
$(O)mhitu.1:    $(PCH1) $(SRC)\mhitu.c    $(HACK_H) $(ARTIFACT_H)
$(O)mkobj.1:    $(PCH1) $(SRC)\mkobj.c    $(HACK_H) $(ARTIFACT_H) $(PROP_H)
$(O)mon.1:      $(PCH1) $(SRC)\mon.c      $(HACK_H) $(MFNDPOS_H)
$(O)mondata.1:  $(PCH1) $(SRC)\mondata.c  $(HACK_H)
$(O)monmove.1:  $(PCH1) $(SRC)\monmove.c  $(HACK_H) $(MFNDPOS_H) $(ARTIFACT_H)
$(O)mthrowu.1:  $(PCH1) $(SRC)\mthrowu.c  $(HACK_H)
$(O)objnam.1:   $(PCH1) $(SRC)\objnam.c   $(HACK_H)
$(O)polyself.1: $(PCH1) $(SRC)\polyself.c $(HACK_H)
$(O)rnd.1:      $(PCH1) $(SRC)\rnd.c      $(HACK_H)
$(O)shk.1:      $(PCH1) $(SRC)\shk.c      $(HACK_H)
$(O)steal.1:    $(PCH1) $(SRC)\steal.c    $(HACK_H)
$(O)timeout.1:	$(PCH1) $(SRC)\timeout.c  $(HACK_H) $(LEV_H)
$(O)track.1:    $(PCH1) $(SRC)\track.c    $(HACK_H)
$(O)trap.1:     $(PCH1) $(SRC)\trap.c     $(HACK_H)
$(O)weapon.1:   $(PCH1) $(SRC)\weapon.c   $(HACK_H)
$(O)zap.1:      $(PCH1) $(SRC)\zap.c      $(HACK_H)

#
# OVL2
#

$(O)attrib.2:   $(PCH2) $(SRC)\attrib.c   $(HACK_H)
$(O)do.2:       $(PCH2) $(SRC)\do.c       $(HACK_H) $(LEV_H)
$(O)do_name.2:  $(PCH2) $(SRC)\do_name.c  $(HACK_H)
$(O)do_wear.2:  $(PCH2) $(SRC)\do_wear.c  $(HACK_H)
$(O)dog.2:      $(PCH2) $(SRC)\dog.c      $(HACK_H)
$(O)engrave.2:  $(PCH2) $(SRC)\engrave.c  $(HACK_H) $(LEV_H)
$(O)hack.2:     $(PCH2) $(SRC)\hack.c     $(HACK_H)
$(O)hacklib.2:  $(PCH2) $(SRC)\hacklib.c  $(HACK_H)
$(O)invent.2:   $(PCH2) $(SRC)\invent.c   $(HACK_H) $(ARTIFACT_H)
$(O)makemon.2:  $(PCH2) $(SRC)\makemon.c  $(HACK_H)
$(O)mon.2:      $(PCH2) $(SRC)\mon.c      $(HACK_H) $(MFNDPOS_H)
$(O)mondata.2:  $(PCH2) $(SRC)\mondata.c  $(HACK_H)
$(O)monmove.2:  $(PCH2) $(SRC)\monmove.c  $(HACK_H) $(MFNDPOS_H) $(ARTIFACT_H)
$(O)shk.2:      $(PCH2) $(SRC)\shk.c      $(HACK_H)
$(O)trap.2:     $(PCH2) $(SRC)\trap.c     $(HACK_H)
$(O)zap.2:      $(PCH2) $(SRC)\zap.c      $(HACK_H)

#
# OVL3
#

$(O)do.3:       $(PCH3) $(SRC)\do.c       $(HACK_H) $(LEV_H)
$(O)hack.3:     $(PCH3) $(SRC)\hack.c     $(HACK_H)
$(O)invent.3:	$(PCH3) $(SRC)\invent.c   $(HACK_H) $(ARTIFACT_H)
$(O)light.3:	$(PCH3) $(SRC)\light.c	  $(HACK_H)
$(O)shk.3:      $(PCH3) $(SRC)\shk.c      $(HACK_H)
$(O)trap.3:     $(PCH3) $(SRC)\trap.c     $(HACK_H)
$(O)zap.3:      $(PCH3) $(SRC)\zap.c      $(HACK_H)

#
# OVLB
#

$(O)allmain.B:  $(PCHB) $(SRC)\allmain.c  $(HACK_H)
$(O)apply.B:    $(PCHB) $(SRC)\apply.c    $(HACK_H)
$(O)artifact.B: $(PCHB) $(SRC)\artifact.c $(HACK_H) $(ARTIFACT_H) $(ARTILIST_H)
$(O)attrib.B:   $(PCHB) $(SRC)\attrib.c   $(HACK_H)
$(O)botl.B:     $(PCHB) $(SRC)\botl.c     $(HACK_H)
$(O)cmd.B:      $(PCHB) $(SRC)\cmd.c      $(HACK_H) $(FUNC_TAB_H)
$(O)dbridge.B:  $(PCHB) $(SRC)\dbridge.c  $(HACK_H)
$(O)do.B:       $(PCHB) $(SRC)\do.c       $(HACK_H) $(LEV_H)
$(O)do_name.B:  $(PCHB) $(SRC)\do_name.c  $(HACK_H)
$(O)do_wear.B:  $(PCHB) $(SRC)\do_wear.c  $(HACK_H)
$(O)dog.B:      $(PCHB) $(SRC)\dog.c      $(HACK_H)
$(O)dogmove.B:  $(PCHB) $(SRC)\dogmove.c  $(HACK_H) $(MFNDPOS_H)
$(O)eat.B:      $(PCHB) $(SRC)\eat.c      $(HACK_H)
$(O)engrave.B:  $(PCHB) $(SRC)\engrave.c  $(HACK_H) $(LEV_H)
$(O)hack.B:     $(PCHB) $(SRC)\hack.c     $(HACK_H)
$(O)hacklib.B:  $(PCHB) $(SRC)\hacklib.c  $(HACK_H)
$(O)invent.B:   $(PCHB) $(SRC)\invent.c   $(HACK_H) $(ARTIFACT_H)
$(O)lock.B:     $(PCHB) $(SRC)\lock.c     $(HACK_H)
$(O)mail.B:     $(PCHB) $(SRC)\mail.c     $(HACK_H) $(MAIL_H) $(DATE_H)
$(O)makemon.B:  $(PCHB) $(SRC)\makemon.c  $(HACK_H)
$(O)mcastu.B:   $(PCHB) $(SRC)\mcastu.c   $(HACK_H)
$(O)mhitm.B:    $(PCHB) $(SRC)\mhitm.c    $(HACK_H) $(ARTIFACT_H)
$(O)mhitu.B:    $(PCHB) $(SRC)\mhitu.c    $(HACK_H) $(ARTIFACT_H)
$(O)mkobj.B:    $(PCHB) $(SRC)\mkobj.c    $(HACK_H) $(ARTIFACT_H) $(PROP_H)
$(O)mkroom.B:   $(PCHB) $(SRC)\mkroom.c   $(HACK_H)
$(O)mon.B:      $(PCHB) $(SRC)\mon.c      $(HACK_H) $(MFNDPOS_H)
$(O)mondata.B:  $(PCHB) $(SRC)\mondata.c  $(HACK_H)
$(O)monmove.B:  $(PCHB) $(SRC)\monmove.c  $(HACK_H) $(MFNDPOS_H) $(ARTIFACT_H)
$(O)mthrowu.B:  $(PCHB) $(SRC)\mthrowu.c  $(HACK_H)
$(O)objnam.B:   $(PCHB) $(SRC)\objnam.c   $(HACK_H)
$(O)pline.B:    $(SRC)\pline.c    $(HACK_H)
	@type schema$(SCHEMA).bc | find "$(@B)_b" > $(VROOMMCFG)
	@echo $(BCOPTS1) >> $(VROOMMCFG)
	@echo $(BCOPTS2) >> $(VROOMMCFG)
	$(CC) $(CFLAGSN) $(COBJNAM)$@ $(SRC)\pline.c
$(O)polyself.B: $(PCHB) $(SRC)\polyself.c $(HACK_H)
$(O)potion.B:   $(PCHB) $(SRC)\potion.c   $(HACK_H)
$(O)priest.B:   $(PCHB) $(SRC)\priest.c   $(HACK_H) $(MFNDPOS_H)
$(O)read.B:     $(PCHB) $(SRC)\read.c     $(HACK_H)
$(O)rnd.B:      $(PCHB) $(SRC)\rnd.c      $(HACK_H)
$(O)shk.B:      $(PCHB) $(SRC)\shk.c      $(HACK_H)
$(O)shknam.B:   $(PCHB) $(SRC)\shknam.c   $(HACK_H)
$(O)sounds.B:   $(PCHB) $(SRC)\sounds.c   $(HACK_H)
$(O)steal.B:    $(PCHB) $(SRC)\steal.c    $(HACK_H)
$(O)timeout.B:	$(PCHB) $(SRC)\timeout.c  $(HACK_H) $(LEV_H)
$(O)track.B:    $(PCHB) $(SRC)\track.c    $(HACK_H)
$(O)trap.B:     $(PCHB) $(SRC)\trap.c     $(HACK_H)
$(O)vault.B:    $(PCHB) $(SRC)\vault.c    $(HACK_H)
$(O)weapon.B:   $(PCHB) $(SRC)\weapon.c   $(HACK_H)
$(O)were.B:     $(PCHB) $(SRC)\were.c     $(HACK_H)
$(O)wizard.B:   $(PCHB) $(SRC)\wizard.c   $(HACK_H) $(QTEXT_H)
$(O)zap.B:      $(PCHB) $(SRC)\zap.c      $(HACK_H)

# end of file
