#	NetHack Makefile.
# Copyright (c) Kenneth Lorber, Bethesda, Maryland, 1991,1992,1993,1996.
# NetHack may be freely redistributed.  See license for details.

###
### INTRODUCTION
###

# This makefile is arranged for compiling for the Amiga with SAS/C 6.51 but
# can be configured for compiling with Manx C 5 or commercial DICE with
# simple changes.  The appropriate changes are identified by #[compiler]
# where compiler is one of: SAS6, MANX, or DICE; the options in this
# makefile as should be set according to the compiler being used.  (But see
# note 3 below.)

# Note: When using the Manx compiler, an alternate make utility is
# required. The bundled Aztec make is just too damaged.

# Note 2: The #SFD_xxx lines are used with mkdmake to generate a DMake-
# compatible makefile (DMakefile) from this file.  Any line beginning with
# #SFD_INSTEAD replaces, in DMakefile, the following line from Makefile.ami.
# #SFD_BEGIN, #SFD_ELSE, and #SFD_END bracket multi-line sections for the two
# makefile formats.
# When changing this file, #SFD_INSTEAD lines will need to be inserted for
# the following cases:
#	- Dependencies with different numbers of filenames (both > 1) on
#	    either side.  The #SFD_INSTEAD line should immediately precede
#	    the line with the colon, and should contain a double colon "::"
#	    instead of a single colon.
#	- Special command lists that override the default.  A line containing
#	    "#SFD_INSTEAD #none" should precede such a rule.  If the rule is
#	    more than one line long, precede it with "#SFD_BEGIN" and
#	    "#SFD_ELSE", and follow it with "#SFD_END".
#	- Files not in the src, sys/amiga, sys/share, or win/tty directories
#	    that rely on the default ".c.o" rule.  Following the dependency
#	    should be "#SFD_INSTEAD <default>" with the filename inserted
#	    into the default rule where appropriate, then a line contianing
#	    "#none".
# In any SFD_BEGIN/ELSE/END block added, put a '##' before every line
# between the BEGIN and ELSE.  Any line that's really a comment needs three
# '#'s, e.g. "### DICE comment".

# Note 2A: Whenever an SFD line/block is added, the appropriate repeat count
#          in mkdmake must be changed.  (The repeat count "0" meaning "repeat
#          until end of file" doesn't work as advertised.)

# Note 3: mkdmake will automatically substitute DICE flags, etc. for SAS
#         where appropriate.  Since the makefile is already set up for SAS,
#         the only people who end up having to make changes here are Manx
#         users (or people who want to change the defaults).

###
### DIRECTORY STRUCTURE
###

NH = NH:
SBIN = $(NH)sbin/
SLIB = $(NH)slib/
NETHACK = $(NH)NetHack/
HACKEXE = $(NH)HackExe/
AMI = $(NH)sys/amiga/
DAT = $(NH)dat/
DOC = $(NH)doc/
I = $(NH)include/
SHARE = $(NH)sys/share/
NHS = $(NH)src/
TTY = $(NH)win/tty/
WSHARE  = $(NH)win/share/
UTIL = $(NH)util/
O = $(NH)obj/
OO = $(NH)objo/
#	NB: O and OO MUST be different directories

###
### INVOCATION
###

#[SAS6]
#MAKE = smake
#[MANX]
#MAKE = make
#[DICE]
#MAKE = dmake

# Startup makefile with:
#
#[SAS6]
#[MANX]
#	$(MAKE) -f $(AMI)Makefile.ami
#	$(MAKE) -f $(AMI)Makefile.ami install
#
#[DICE]
#	$(MAKE) -f $(AMI)DMakefile
#	$(MAKE) -f $(AMI)DMakefile install
#
#
# You may use following targets on $(MAKE) command lines:
#   all		do it all (default)
#   link	just create binary from object files
#   obj		just create common object files
#   obja	just create amiga object files
#   objs	just create shared object files
#   clean	deletes the object files
#   spotless	deletes the object files, main binary, and more
#
# Note:  We do not build the Guidebook here since it needs tbl
# (See the file sys/unix/Makefile.doc for more information)

#X# Precompiled header files:
#X#   $(HDEP) should appear in any dependency list for an object file where
#X#   we would want to make use of the precompiled version of $(I)hack.h,
#X#   while $(CSYM) should appear in the C compiler command line that creates
#X#   any such object file.  (Changes made here should agree with the $(HDEP):
#X#   target that appears later in this makefile.)
#X#

#SFD_BEGIN
##
###[DICE]
###   If we were compiling with DICE and wanted to use the symbol table
###   pre-loading feature, we would uncomment these following two lines.
##
##HDEP	= $(I)hack.sym
##CSYM	= -H$(I)hack.sym=hack.h
##
#SFD_ELSE

#[SAS5]
#   If we were to use the precompiled header file feature in a newer version
#   of SAS/C, we would comment out these following two lines.
#   If we don't use precompiled header files, we uncomment it as well.

HDEP	= $(I)hack.h $(I)pm.h $(I)onames.h
CSYM	=

#[MANX]
#   If we were compiling with Aztec, and wanted to use the symbol table
#   pre-loading feature, we would uncomment these following two lines.

#HDEP	= Ram:hack.sym
#CSYM	= +IRam:hack.sym

#SFD_END

#Pathname for uudecode program:
UUDEC	= uudecode

# Flex/Bison command assignments -- Useful only if you have flex/bison
FLEX	= flex
BISON	= bison
# FBFIL and FBLIB may be used, if required by your version of flex or bison,
# to specify additional files or libraries to be linked with
FBFIL	=
FBLIB	= #lib lib:compat.lib

# If you're compiling this on a 1.3 system, you'll have to uncomment the
# following (for use with the ifchange script below).  Also useful instead of
# "protect ifchange +s"
EXECUTE = execute

# Headers we depend on
AMDEP = $(AMI)winproto.h $(AMI)winext.h $(AMI)windefs.h $(I)winami.h

# Pathname for the C compiler being used.

#SFD_BEGIN
##
###[DICE]
##CC	= dcc
##ASM	= das
##
#SFD_ELSE

#[SAS6]
CC	= sc
ASM	= asm

#[MANX]
#CC	= cc

#SFD_END

# Compilation flags for selected C Compiler:
#   $(CFLAGS) should appear before filename arguments of $(CC) command line.

#SFD_BEGIN
##
###[DICE]
##CFLAGS = -c -I$(I) -mC -mD -ms -//
##CFLAGS2 =
##WBCFLAGS = -c -I$(I) -mC -mD -ms -//
##WBC2FLAGS = -DCLI
##SPLFLAGS = -DSPLIT
##
#SFD_ELSE

#[SAS6]
#   Note: make sure your CLI stack size is large (at least 50K) or lev_comp
#   and makedefs may fail terribly - stack checking is disabled.
#
#  **** WARNING ****	GST support is not fool proof.  You must make makedefs
#			without a GST first so that the generated headers
#			that are part of the GST can be made.
#
#GSTSRC=$(AMI)gst.c
#
#GSTHEAD=$(I)hack.h $(I)pm.h $(I)trap.h $(I)onames.h \
#	$(AMI)winami.p $(AMI)amidos.p $(AMI)amiwind.p
#
#GSTFILE=$(O)NetHack.gst
# undefine this to not compile with GSTs
#GST=gst=$(GSTFILE)
#
DEBUG=debug=symbol
CPU=cpu=68000
#OPTFLAGS=opt opttime optpeep optgo optinl optsched optcomp=10 optdep=5 optrdep=5 #optalias +OPTTIME -OPTSIZE
CFLAGS	= data=far nominc $(DEBUG) idir=$(I) $(CPU) nostkchk nover \
	codename=nhcode dataname=nhdata strmerge $(OPTFLAGS) $(TILES) $(SAVEDS) \
	afp $(ERRREXX) $(GST)
# for files that are too large for the standard flags:
CFLAGS2 = code=far strmerge $(SAVEDS)
WBCFLAGS = ignore=217,62 data=far ansi nminc code=far idir=$(I) $(CPU) afp \
	$(DEBUG) $(ERRREXX) define=AMIGA $(GST)
XXX = data=far ansi nminc idir=$(I) $(CPU) afp opt optinline optinlocal \
	optloop opttime
WBC2FLAGS = define=CLI
SPLFLAGS = define=SPLIT #dollarok
#for amistack.c
CFLAGS3	= data=near dataname=__MERGED nominc $(DEBUG) idir=$(I) $(CPU) nover nostkchk \
	codename=nhcode strmerge $(OPTFLAGS) $(TILES) $(SAVEDS) \
	afp $(ERRREXX) $(GST)

#[MANX]
#CFLAGS = -i$(I) -mc -md -ms -pa -ps -bs -wo -qq
#WBCFLAGS = -mc -md -ms -pa -ps -bs -wo -qq -pp

#SFD_END

# Assembly flags:

#SFD_BEGIN
##
###[DICE]
##AFLAGS =
##AOBJSPEC = -o
##
#SFD_ELSE

#[SAS6]
AFLAGS = #what to put here?
AOBJSPEC = -o

#SFD_END

# Components of various link command lines:
#   $(LINK) should be the pathname of the linker being used (with any options
#   that should appear at the beginning of the command line).  The name of the
#   output file should appear immediately after $(LNSPEC).  $(LIN) should
#   appear before the list of object files in each link command.  $(LLINK)
#   should appear as the list of object files in the link command line that
#   creates the NetHack executable.  $(LLIB) should appear at the end of each
#   link command line.

# Note: amiga.lib added due to missing prototypes/pragmas.
# Should be deleted when this is resolved.

#SFD_BEGIN
##
###[DICE]
### If you have flex/bison libraries, use the second definition of FLLIB
### instead of the first.
##
##LINK	 = dcc -mD
##LIN	 =
##LLINK	 = @$(AMI)ami.lnk
##LLIB	 =
##FLLIB	 =
###FLLIB	 = -l$(FBLIB)
##OBJSPEC = -o
##PNSPEC	= -o
##LNSPEC = -o
##CCLINK	= dcc
##CLFLAGS = -I$(I) -mC -mD -ms -//
##INCLSPEC = -I
##DEFSPEC = -D
##IGNSPEC = -j
##
#SFD_ELSE

#[SAS6]

LINK	= slink noicons verbose maxhunk 262144 stripdebug
LIN	= from lib:catch.o
LLINK	= with $(AMI)ami.lnk
LLIB	= lib lib:scnb.lib BATCH #lib lib:amiga.lib BATCH #scnb.lib or sc.lib
FLLIB	= $(FBLIB) lib Lib:sc.lib BATCH
OBJSPEC = objname=
PNSPEC = noicons to #pname=
LNSPEC = to
CCLINK =  sc link
INCLSPEC = idir=
DEFSPEC = define=
IGNSPEC = ignore=
COMPACT_HEADERS=$(GSTFILE)

#[MANX]

#LINK	= ln -g +q +ss -o
#LIN	=
#LLINK	= -f $(AMI)ami.lnk
#LLIB	= -lcl16
#FLLIB  = -lcl16
#OBJSPEC = -o
#PNSPEC = -o
#LNSPEC = -o
#CCLINK = cc
#INCLSPEC = -i
#DEFSPEC = -d
#IGNSPEC = -j

#SFD_END

###
### FILE LISTS
###

# A more reasonable random number generator (recommended for the Amiga):

RANDOBJ	= $(O)random.o

#SFD_INSTEAD #none
.PRECIOUS:  $(I)config.h $(I)decl.h $(I)hack.h $(I)permonst.h $(I)you.h

# Almost nothing below this line should have to be changed.
# (Exceptions are marked by [SAS6], [MANX], etc.)
#
# Other things that have to be reconfigured are in config.h,
# (amiconf.h, pcconf.h), and possibly system.h, tradstdc.h.

# Object files for makedefs:

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

# Object files for special levels compiler:

SPLEVOBJS = \
	$(OO)lev_yacc.o $(OO)lev_lex.o	$(OO)lev_main.o \
	$(O)decl.o 	$(O)drawing.o	$(O)monst.o \
	$(O)objects.o	$(OO)panic.o

# Object files for dungeon compiler

DGNCOMPOBJS = \
	$(OO)dgn_yacc.o	$(OO)dgn_lex.o	$(OO)dgn_main.o $(O)alloc.o $(OO)panic.o

# Object files for NetHack:

COMMOBJ = \
	$(O)allmain.o	$(O)alloc.o	$(O)apply.o 	$(O)artifact.o	\
	$(O)attrib.o	$(O)ball.o	$(O)bones.o	$(O)botl.o	\
	$(O)cmd.o	$(O)dbridge.o	$(O)decl.o	$(O)detect.o	\
	$(O)dig.o	$(O)display.o	$(O)dlb.o	$(O)do.o	\
	$(O)do_name.o	$(O)do_wear.o	$(O)dog.o	$(O)dogmove.o	\
	$(O)dokick.o	$(O)dothrow.o	$(O)drawing.o	$(O)dungeon.o	\
	$(O)eat.o	$(O)end.o	$(O)engrave.o	$(O)exper.o	\
	$(O)explode.o	$(O)extralev.o	$(O)files.o 	$(O)fountain.o	\
	$(O)hack.o	$(O)hacklib.o	$(O)invent.o	$(O)light.o	\
	$(O)lock.o	$(O)mail.o	$(O)makemon.o	$(O)mapglyph.o  \
	$(O)mcastu.o	$(O)mhitm.o	$(O)mhitu.o	$(O)minion.o	\
	$(O)mklev.o	$(O)mkmap.o	$(O)mkmaze.o	$(O)mkobj.o	\
	$(O)mkroom.o	$(O)mon.o	$(O)mondata.o	$(O)monmove.o	\
	$(O)monst.o	$(O)mplayer.o	$(O)mthrowu.o	$(O)muse.o	\
	$(O)music.o	$(O)o_init.o	$(O)objects.o	$(O)objnam.o	\
	$(O)options.o	$(O)pager.o	$(O)pickup.o	$(O)pline.o	\
	$(O)polyself.o	$(O)potion.o	$(O)pray.o	$(O)priest.o	\
	$(O)quest.o	$(O)questpgr.o	$(O)read.o	$(O)rect.o	\
	$(O)region.o	$(O)restore.o	$(O)rnd.o	$(O)role.o	\
	$(O)rumors.o	$(O)save.o	$(O)shk.o	$(O)shknam.o	\
	$(O)sit.o	$(O)sounds.o	$(O)sp_lev.o	$(O)spell.o	\
	$(O)steal.o	$(O)steed.o	$(O)sys.o	$(O)teleport.o	\
	$(O)timeout.o	$(O)topten.o	$(O)track.o	$(O)trap.o	\
	$(O)u_init.o	$(O)uhitm.o	$(O)vault.o	$(O)version.o	\
	(O)vision.o	$(O)weapon.o	$(O)were.o	$(O)wield.o	\
	$(O)windows.o	$(O)wizard.o	$(O)worm.o	$(O)worn.o	\
	$(O)write.o	$(O)zap.o

MAKEDEFOBJ = \
	$(O)monstr.o

AMIGAOBJ = \
	$(O)amidos.o	$(O)amirip.o 	$(O)amistack.o \
	$(O)amiwind.o	$(O)winami.o	$(O)winchar.o	$(O)winfuncs.o	\
	$(O)winkey.o	$(O)winamenu.o	$(O)winreq.o	$(O)winstr.o

# Objects from assembly sources (because DMake can't handle default rules)
AMIGAOBJ2 = \
#	$(O)dispmap.o

SHAREOBJ = \
	$(O)pcmain.o	$(RANDOBJ)

TTYOBJ = \
	$(O)getline.o $(O)termcap.o $(O)topl.o $(O)wintty.o $(O)amitty.o \
	$(O)rip.o

# Yuck yuck yuck.  Have to tell DMake where these are, since they're not
# all in the same place.
TTYSRC = \
	$(TTY)getline.c $(TTY)termcap.c $(TTY)topl.c $(TTY)wintty.c \
	$(AMI)amitty.c $(NHS)rip.c

# All the object files for NetHack:

HOBJ = $(COMMOBJ) $(AMIGAOBJ) $(AMIGAOBJ2) $(SHAREOBJ) $(MAKEDEFOBJ) $(TTYOBJ)

###
### DATA FILES
###

# quest files
ADFILES1= $(SLIB)Arc-fila.lev $(SLIB)Arc-filb.lev $(SLIB)Arc-loca.lev \
	$(SLIB)Arc-strt.lev
ADFILES= $(SLIB)Arc-goal.lev $(ADFILES1)

BDFILES1= $(SLIB)Bar-fila.lev $(SLIB)Bar-filb.lev $(SLIB)Bar-loca.lev \
	$(SLIB)Bar-strt.lev
BDFILES= $(SLIB)Bar-goal.lev $(BDFILES1)

CDFILES1= $(SLIB)Cav-fila.lev $(SLIB)Cav-filb.lev $(SLIB)Cav-loca.lev \
	$(SLIB)Cav-strt.lev
CDFILES= $(SLIB)Cav-goal.lev $(CDFILES1)

HDFILES1= $(SLIB)Hea-fila.lev $(SLIB)Hea-filb.lev $(SLIB)Hea-loca.lev \
	$(SLIB)Hea-strt.lev
HDFILES= $(SLIB)Hea-goal.lev $(HDFILES1)

KDFILES1= $(SLIB)Kni-fila.lev $(SLIB)Kni-filb.lev $(SLIB)Kni-loca.lev \
	$(SLIB)Kni-strt.lev
KDFILES= $(SLIB)Kni-goal.lev $(KDFILES1)

MDFILES1= $(SLIB)Mon-fila.lev $(SLIB)Mon-filb.lev $(SLIB)Mon-loca.lev \
	$(SLIB)Mon-strt.lev
MDFILES= $(SLIB)Mon-goal.lev $(MDFILES1)

PDFILES1= $(SLIB)Pri-fila.lev $(SLIB)Pri-filb.lev $(SLIB)Pri-loca.lev \
	$(SLIB)Pri-strt.lev
PDFILES= $(SLIB)Pri-goal.lev $(PDFILES1)

RDFILES1= $(SLIB)Rog-fila.lev $(SLIB)Rog-filb.lev $(SLIB)Rog-loca.lev \
	$(SLIB)Rog-strt.lev
RDFILES= $(SLIB)Rog-goal.lev $(RDFILES1)

RANFILES1= $(SLIB)Ran-fila.lev $(SLIB)Ran-filb.lev $(SLIB)Ran-loca.lev \
	$(SLIB)Ran-strt.lev
RANFILES= $(SLIB)Ran-goal.lev $(RANFILES1)

SDFILES1= $(SLIB)Sam-fila.lev $(SLIB)Sam-filb.lev $(SLIB)Sam-loca.lev \
	$(SLIB)Sam-strt.lev
SDFILES= $(SLIB)Sam-goal.lev $(SDFILES1)

TDFILES1= $(SLIB)Tou-fila.lev $(SLIB)Tou-filb.lev $(SLIB)Tou-loca.lev \
	$(SLIB)Tou-strt.lev
TDFILES= $(SLIB)Tou-goal.lev $(TDFILES1)

VDFILES1= $(SLIB)Val-fila.lev $(SLIB)Val-filb.lev $(SLIB)Val-loca.lev \
	$(SLIB)Val-strt.lev
VDFILES= $(SLIB)Val-goal.lev $(VDFILES1)

WDFILES1= $(SLIB)Wiz-fila.lev $(SLIB)Wiz-filb.lev $(SLIB)Wiz-loca.lev \
	$(SLIB)Wiz-strt.lev
WDFILES= $(SLIB)Wiz-goal.lev $(WDFILES1)

XDFILES=	$(ADFILES) $(BDFILES) $(CDFILES) $(HDFILES) $(KDFILES) \
		$(MDFILES) $(PDFILES) $(RDFILES) $(RANFILES) $(SDFILES) $(TDFILES) \
		$(VDFILES) $(WDFILES)

TILEFILES= \
	$(SBIN)txt2iff \
	$(NETHACK)tiles \
	$(NETHACK)tiles/objects.iff \
	$(NETHACK)tiles/monsters.iff \
	$(NETHACK)tiles/other.iff

INSTDUNGEONFILES1= \
	$(SLIB)air.lev		$(SLIB)asmodeus.lev	$(SLIB)astral.lev \
	$(SLIB)baalz.lev	$(SLIB)bigrm-1.lev	$(SLIB)bigrm-2.lev \
	$(SLIB)bigrm-3.lev	$(SLIB)bigrm-4.lev	$(SLIB)bigrm-5.lev \
	$(SLIB)castle.lev	$(SLIB)dungeon		$(SLIB)earth.lev \
	$(SLIB)fakewiz1.lev	$(SLIB)fakewiz2.lev	$(SLIB)fire.lev \
	$(SLIB)juiblex.lev	$(SLIB)knox.lev		$(SLIB)medusa-1.lev \
	$(SLIB)medusa-2.lev	$(SLIB)minend-1.lev	$(SLIB)minend-2.lev \
	$(SLIB)minetn-1.lev	$(SLIB)minetn-2.lev	$(SLIB)minefill.lev \
	$(SLIB)options		$(SLIB)oracle.lev	$(SLIB)orcus.lev \
	$(SLIB)sanctum.lev	$(SLIB)soko1-1.lev	$(SLIB)soko1-2.lev \
	$(SLIB)soko2-1.lev	$(SLIB)soko2-2.lev	$(SLIB)soko3-1.lev \
	$(SLIB)soko3-2.lev	$(SLIB)soko4-1.lev	$(SLIB)soko4-2.lev \
	$(SLIB)tower1.lev	$(SLIB)tower2.lev	$(SLIB)tower3.lev \
	$(SLIB)valley.lev	$(SLIB)water.lev	$(SLIB)wizard1.lev \
	$(SLIB)wizard2.lev	$(SLIB)wizard3.lev \
	$(XDFILES)

INSTDUNGEONFILES= $(NETHACK)NetHack.cnf $(INSTDUNGEONFILES1)


INSTDATAFILES= \
	$(NETHACK)license	$(NETHACK)logfile	$(NETHACK)record \
	$(NETHACK)tomb.iff	$(NETHACK)amii.hlp 	$(NETHACK)Recover.txt \
	$(NETHACK)GuideBook.txt	$(NETHACK)NetHack.txt	$(NETHACK)Install.ami

LIBFILES= \
	$(INSTDUNGEONFILES1) \
	$(SLIB)cmdhelp	 	$(SLIB)data		$(SLIB)dungeon \
	$(SLIB)help		$(SLIB)hh		$(SLIB)history \
	$(SLIB)opthelp		$(SLIB)oracles		$(SLIB)rumors \
	$(SLIB)quest.dat	$(SLIB)wizhelp

###
### Getting down to business:
###

#SFD_INSTEAD all:  $(SBIN)lev_comp $(SBIN)dgn_comp $(SBIN)NetHack \
all:  $(COMPACT_HEADERS) $(SBIN)lev_comp $(SBIN)dgn_comp $(SBIN)NetHack \
	$(SBIN)dlb $(NETHACK)recover

install: all inst-data inst-dungeon inst-fonts inst-tiles \
	$(NETHACK)nhdat $(NETHACK)NetHack

$(SBIN)NetHack:  $(HOBJ) $(AMI)ami.lnk
	$(LINK) $(LNSPEC) $(SBIN)NetHack $(LIN) $(LLINK) $(LLIB)

$(NETHACK)NetHack: $(SBIN)NetHack
	copy $(SBIN)NetHack $(NETHACK)NetHack

link:
	$(LINK) $(LNSPEC) $(SBIN)NetHack $(LIN) $(LLINK) $(LLIB)

$(AMI)ami.lnk: $(AMI)Makefile.ami
	list to $(AMI)ami.lnk lformat="$(O)%s" $(O)\#?.o QUICK NOHEAD

## dlb support
$(OO)dlb_main.o:	$(UTIL)dlb_main.c $(HDEP) $(I)dlb.h $(I)date.h
	$(CC) $(CFLAGS) $(OBJSPEC)$(OO)dlb_main.o $(UTIL)dlb_main.c

$(SBIN)dlb:	$(OO)dlb_main.o $(O)dlb.o $(O)alloc.o $(OO)panic.o
	$(LINK) $(PNSPEC) $(SBIN)dlb $(LIN) $(OO)dlb_main.o $(O)dlb.o \
	  $(O)alloc.o $(OO)panic.o $(LLIB)

obj:  $(HOBJ)

obja:  $(AMIGAOBJ)

objs:  $(SHAREOBJ)


#SFD_BEGIN
#SFD_ELSE
SUFFIXES = .lev .des
.des.lev:
	$(SBIN)lev_comp $<
#SFD_END


# The default method for creating object files:

#SFD_BEGIN
##
###[DICE]
##
##$(COMMOBJ): $(COMMOBJ:"$(O)*.o":"$(NHS)%1.c")
##	$(CC) $(CFLAGS) $(CSYM) $(OBJSPEC)%(left) %(right)
##
##$(AMIGAOBJ): $(AMIGAOBJ:"$(O)*.o":"$(AMI)%1.c")
##	$(CC) $(CFLAGS) $(CSYM) $(OBJSPEC)%(left) %(right)
##
##$(SHAREOBJ): $(SHAREOBJ:"$(O)*.o":"$(SHARE)%1.c")
##	$(CC) $(CFLAGS) $(CSYM) $(OBJSPEC)%(left) %(right)
##
##$(TTYOBJ): $(TTYSRC)
##	$(CC) $(CFLAGS) $(CSYM) $(OBJSPEC)%(left) %(right)
##
#SFD_ELSE

#[SAS6]

.c.o:
	$(CC) $(CFLAGS) $(CSYM) $(OBJSPEC)$@ $<

#SFD_END


clean:
	-delete $(O)\#?.o $(OO)\#?.o

spotless:  clean
	-delete $(SBIN)NetHack $(SBIN)lev_comp $(SBIN)makedefs $(SBIN)dgn_comp
	-delete $(SBIN)dlb $(SBIN)txt2iff $(SBIN)splitter
	-delete $(SBIN)tilemap
	-delete $(SLIB)data $(SLIB)rumors
	-delete $(SLIB)\#?.lev
	-delete $(SLIB)dungeon
	-delete $(SLIB)cmdhelp $(SLIB)help $(SLIB)hh $(SLIB)history
	-delete $(SLIB)opthelp $(SLIB)options $(SLIB)oracles
	-delete $(SLIB)quest.dat $(SLIB)wizhelp
#	-delete $(SLIB)earth.lev $(SLIB)air.lev $(SLIB)fire.lev
#	-delete $(SLIB)water.lev $(SLIB)astral.lev
#	-delete $(SLIB)tower1.lev $(SLIB)tower2.lev $(SLIB)tower3.lev
#	-delete $(SLIB)fakewiz1.lev $(SLIB)fakewiz2.lev
#	-delete $(SLIB)medusa-1.lev $(SLIB)medusa-2.lev
#	-delete $(SLIB)oracle.lev $(SLIB)wizard1.lev $(SLIB)wizard2.lev
#	-delete $(SLIB)wizard3.lev $(DAT)dungeon.pdf $(SLIB)valley.lev
#	-delete $(SLIB)minefill.lev
#	-delete $(SLIB)minetn-1 $(SLIB)minetn-2 $(SLIB)minend-1 $(SLIB)minend-2
#	-delete	$(SLIB)soko1-1.lev $(SLIB)soko1-2.lev $(SLIB)soko2-1.lev
#	-delete $(SLIB)soko2-2.lev $(SLIB)soko3-1.lev $(SLIB)soko3-2.lev
#	-delete $(SLIB)soko4-1.lev $(SLIB)soko4-2.lev
#	-delete $(ADFILES)
#	-delete $(BDFILES)
#	-delete $(CDFILES)
#	-delete $(HDFILES)
#	-delete $(KDFILES)
#	-delete $(MDFILES)
#	-delete $(PDFILES)
#	-delete $(RDFILES)
#	-delete $(RANFILES)
#	-delete $(SDFILES)
#	-delete $(TDFILES)
#	-delete $(VDFILES)
#	-delete $(WDFILES)
	-delete $(I)onames.h $(I)pm.h $(I)date.h
	-delete $(NHS)tile.c $(NHS)monstr.c
	-delete $(I)tile.h 
#	-echo to $(I)onames.h "" noline
#	-wait 2
#	-echo to $(I)pm.h "" noline
#	-wait 2
#	-setdate $(UTIL)makedefs.c
#	-wait 2

# Creating precompiled version of $(I)hack.h to save disk I/O.

#SFD_BEGIN
##
###[DICE]
###   If we were compiling with DICE and wanted to use the symbol table
###   pre-loading feature, we would technically not need a rule to make the
###   precompiled header file, because DCC handles this automatically;
###   however, we must delete the precompiled header file if any of the
###   includes change, and we need to create it manually because the
###   sys/amiga sources, compiled first, define things differently than the
###   main sources want them.
##
##$(HDEP):  $(I)hack.h $(I)pm.h $(I)onames.h
##	-delete $(I)hack.sym
##	echo to Ram:hackincl.c "#include <hack.h>"
##	$(CC) $(CFLAGS) $(CSYM) $(OBJSPEC)Ram:hackincl.o Ram:hackincl.c
##	-delete Ram:hackincl.c Ram:hackincl.o
##
#SFD_ELSE

#X#[SAS5]
#X#   If we were to use the precompiled header file feature of SAS/C, we
#X#   would uncomment the following lines.  (Also see defines for HDEP and
#X#   CSYM near the beginning of this file, as these should be appropriately
#X#   defined.)

#X#$(HDEP):  $(I)hack.h $(SBIN)makedefs
#X#	echo to Ram:hackincl.c "#include <$(I)hack.h>"
#X#	$(CC) $(CFLAGS) -ph $(OBJSPEC)$@ Ram:hackincl.c
#X#	-delete Ram:hackincl.c

#[MANX]
#   If we were compiling with Aztec, and wanted to use the symbol table
#   pre-loading feature, we would uncomment these following two lines.

#$(HDEP):  $(I)hack.h $(SBIN)makedefs
#	$(CC) $(CFLAGS) -a $(OBJSPEC)Ram:hack.asm +h$@ $(I)hack.h
#	-delete Ram:hack.asm

#SFD_END

#
#	Please note:	The dependency lines for the modules here are
#			deliberately incorrect.  Including "hack.h" in
#			the dependency list would cause a dependency
#			loop.
#

$(SBIN)makedefs:  $(MAKEOBJS)
	$(LINK) $(LNSPEC) $(SBIN)makedefs $(LIN) $(MAKEOBJS) $(LLIB)

$(OO)makedefs.o:  $(UTIL)makedefs.c $(I)config.h $(I)permonst.h $(I)monsym.h \
		$(I)objclass.h  $(I)patchlevel.h $(I)artilist.h
	$(CC) $(DEFSPEC)MAKEDEFS_C $(CFLAGS) $(OBJSPEC)$@ $(UTIL)makedefs.c

$(SBIN)lev_comp:  $(SPLEVOBJS)
	$(LINK) $(LNSPEC) $(SBIN)lev_comp $(LIN) $(SPLEVOBJS) $(FBFIL) $(FLLIB)

$(SBIN)dgn_comp:  $(DGNCOMPOBJS)
	$(LINK) $(LNSPEC) $(SBIN)dgn_comp $(LIN) $(DGNCOMPOBJS) $(FBFIL) $(FLLIB)

$(OO)lev_yacc.o:  $(UTIL)lev_yacc.c $(HDEP) $(I)sp_lev.h $(I)pm.h $(I)onames.h
#	setdate $(UTIL)lev_yacc.c
	$(CC) $(DEFSPEC)LEV_LEX_C $(DEFSPEC)PREFIX="NH:slib/" $(CFLAGS) \
		$(DEFSPEC)alloca=malloc $(OBJSPEC)$@ $(UTIL)lev_yacc.c

$(OO)lev_lex.o: $(UTIL)lev_lex.c $(HDEP) $(I)lev_comp.h $(I)sp_lev.h
	$(CC) $(DEFSPEC)LEV_LEX_C $(CFLAGS) $(OBJSPEC)$@ $(UTIL)lev_lex.c

$(OO)lev_main.o:  $(UTIL)lev_main.c $(HDEP) $(I)pm.h $(I)onames.h $(I)date.h
	$(CC) $(DEFSPEC)LEV_LEX_C $(DEFSPEC)AMIGA $(CFLAGS) $(OBJSPEC)$@ \
		$(UTIL)lev_main.c

$(OO)dgn_yacc.o:  $(UTIL)dgn_yacc.c $(HDEP) $(I)dgn_file.h $(I)patchlevel.h
	$(CC) $(DEFSPEC)LEV_LEX_C $(CFLAGS) $(DEFSPEC)alloca=malloc \
		$(OBJSPEC)$@ $(UTIL)dgn_yacc.c

$(OO)dgn_lex.o: $(UTIL)dgn_lex.c $(I)config.h $(I)dgn_comp.h $(I)dgn_file.h
	$(CC) $(DEFSPEC)LEV_LEX_C $(CFLAGS) $(OBJSPEC)$@ $(UTIL)dgn_lex.c

$(OO)dgn_main.o: $(UTIL)dgn_main.c $(I)config.h $(I)date.h
	$(CC) $(DEFSPEC)LEV_LEX_C $(DEFSPEC)AMIGA $(CFLAGS) $(OBJSPEC)$@ \
		$(UTIL)dgn_main.c

$(OO)panic.o: $(UTIL)panic.c $(HDEP)
#SFD_INSTEAD 	$(CC) $(CFLAGS) $(OBJSPEC)%(left) $(UTIL)panic.c
#none

$(OO)recover.o: $(UTIL)recover.c $(I)config.h $(I)date.h
	$(CC) $(DEFSPEC)LEV_LEX_C $(DEFSPEC)AMIGA $(CFLAGS) $(OBJSPEC)$@ \
		$(UTIL)recover.c

$(NETHACK)recover: $(OO)recover.o
	$(LINK) $(LNSPEC) $(NETHACK)recover $(LIN) $(OO)recover.o $(LLIB)

# [OPTION] -- If you have flex/bison, leave these uncommented.  Otherwise,
# comment them out and be careful! (You're not guaranteed to have the most
# up to date *_comp.c, *_comp.h and *_lex.c)

$(I)lev_comp.h: $(UTIL)lev_yacc.c $(I)patchlevel.h

$(UTIL)lev_yacc.c:  $(UTIL)lev_comp.y $(I)patchlevel.h
	$(BISON) -d $(UTIL)lev_comp.y
#	copy y.tab.c $(UTIL)lev_yacc.c
#	copy y.tab.h $(I)lev_comp.h
	copy $(UTIL)lev_comp.tab.c $(UTIL)lev_yacc.c
	copy $(UTIL)lev_comp.tab.h $(I)lev_comp.h
#	delete y.tab.c
#	delete y.tab.h
	delete $(UTIL)lev_comp.tab.c
	delete $(UTIL)lev_comp.tab.h

$(UTIL)lev_lex.c:  $(UTIL)lev_comp.l $(I)patchlevel.h
	$(FLEX) $(UTIL)lev_comp.l
	copy lex.yy.c $(UTIL)lev_lex.c
	delete lex.yy.c

$(I)dgn_comp.h: $(UTIL)dgn_yacc.c $(I)patchlevel.h

$(UTIL)dgn_yacc.c:  $(UTIL)dgn_comp.y $(I)patchlevel.h
	$(BISON) -d $(UTIL)dgn_comp.y
#	copy y.tab.c $(UTIL)dgn_yacc.c
#	copy y.tab.h $(I)dgn_comp.h
	copy $(UTIL)dgn_comp.tab.c $(UTIL)dgn_yacc.c
	copy $(UTIL)dgn_comp.tab.h $(I)dgn_comp.h
#	delete y.tab.c
#	delete y.tab.h
	delete $(UTIL)dgn_comp.tab.c
	delete $(UTIL)dgn_comp.tab.h

$(UTIL)dgn_lex.c:  $(UTIL)dgn_comp.l $(I)patchlevel.h
	$(FLEX) $(UTIL)dgn_comp.l
	copy lex.yy.c $(UTIL)dgn_lex.c
	delete lex.yy.c

#
#	The following include files depend on makedefs to be created.
#	As a result, they are not defined in HACKINCL, instead, their
#	dependencies are explicitly outlined here.
#

#
#	date.h should be remade any time any of the source or include code
#	is modified.  Unfortunately, this would make the contents of this
#	file far more complex.	Since "hack.h" depends on most of the include
#	files, we kludge around this by making date.h dependent on hack.h,
#	even though it doesn't include this file.
#

#SFD_INSTEAD $(I)date.h $(DAT)options::  $(HDEP) $(SBIN)makedefs $(AMIGAOBJ)
$(I)date.h $(DAT)options:  $(HDEP) $(SBIN)makedefs $(AMIGAOBJ) $(I)patchlevel.h
	$(SBIN)makedefs -v
	$(EXECUTE) $(AMI)ifchange MOVE $(I)t.date.h $(I)date.h
	-wait 2

$(I)onames.h:  $(SBIN)makedefs
	$(SBIN)makedefs -o
	$(EXECUTE) $(AMI)ifchange TOUCH $(I)t.onames.h $(I)onames.h $(I)decl.h
	$(EXECUTE) $(AMI)ifchange MOVE $(I)t.onames.h $(I)onames.h
	-wait 2

$(I)pm.h:  $(SBIN)makedefs
	$(SBIN)makedefs -p
	$(EXECUTE) $(AMI)ifchange TOUCH $(I)t.pm.h $(I)pm.h $(I)decl.h $(I)youprop.h
	$(EXECUTE) $(AMI)ifchange MOVE $(I)t.pm.h $(I)pm.h
	-wait 2

$(SLIB)quest.dat:	$(DAT)quest.txt $(SBIN)makedefs
	$(SBIN)makedefs -q

$(NHS)monstr.c:  $(HDEP) $(SBIN)makedefs
	$(SBIN)makedefs -m
	-wait 2

$(SLIB)oracles:	$(DAT)oracles.txt $(SBIN)makedefs
	$(SBIN)makedefs -h
	-wait 2

#
#	The following programs vary depending on what OS you are using.
#	As a result, they are not defined in HACKSRC and their dependencies
#	are explicitly outlined here.
#

$(O)amidos.o:  $(AMI)amidos.c $(HDEP)

$(O)amirip.o:  $(AMI)amirip.c $(HDEP)

$(O)aglue.o:  $(AMI)aglue.a
	$(ASM) $(AFLAGS) $(AOBJSPEC)$(O)aglue.o $(AMI)aglue.a

$(O)winchar.o:	$(AMI)winchar.c $(NHS)tile.c $(HDEP)

$(NHS)tile.c:	$(WSHARE)tilemap.c
#SFD_INSTEAD 	$(CCLINK) $(CLFLAGS) $(PNSPEC) $(SBIN)tilemap $(WSHARE)tilemap.c
	$(CCLINK) $(CFLAGS) $(PNSPEC) $(SBIN)tilemap $(WSHARE)tilemap.c
	$(SBIN)tilemap

$(O)winstr.o:	$(AMI)winstr.c $(HDEP) $(AMDEP)

$(O)winreq.o:	$(AMI)winreq.c $(HDEP) $(AMDEP) $(AMI)colorwin.c $(AMI)clipwin.c

$(O)winfuncs.o:	$(AMI)winfuncs.c $(HDEP) $(AMDEP) $(I)patchlevel.h

$(O)winkey.o:	$(AMI)winkey.c $(HDEP) $(AMDEP)

$(O)winamenu.o:	$(AMI)winamenu.c $(HDEP) $(AMDEP)

$(O)winami.o:	$(AMI)winami.c $(HDEP) $(AMDEP) #$(AMI)char.c $(AMI)randwin.c

#$(O)amilib.o:	$(AMI)amilib.c $(HDEP) $(AMDEP)

$(O)amiwind.o:  $(AMI)amiwind.c $(AMI)amimenu.c $(HDEP) $(AMDEP)

$(O)amiwbench.o:  $(AMI)amiwbench.c $(HDEP)

$(O)random.o:  $(SHARE)random.c

$(O)pcmain.o:  $(SHARE)pcmain.c $(HDEP) $(I)dlb.h

$(O)dispmap.o:	$(AMI)dispmap.s
	$(ASM) $(AFLAGS) $(AOBJSPEC)$@ $<

# Stuff to build the front ends
$(NETHACK)HackWB: $(OO)wb.o $(OO)wbx.o $(OO)loader.o $(OO)multi.o
	$(LINK) $(LNSPEC) $(NETHACK)HackWB $(LIN) $(OO)wb.o $(OO)wbx.o \
		$(OO)loader.o $(OO)multi.o $(LLIB)

$(NETHACK)HackCli: $(OO)cli.o $(OO)loader.o $(OO)multi.o
	$(LINK) $(LNSPEC) $(NETHACK)HackCli $(LIN) $(OO)cli.o $(OO)loader.o \
		$(OO)multi.o $(LLIB)

# This needs to exist to eliminate the HackWB startup message
#SFD_INSTEAD $(NETHACK)WBDefaults.def: $(NETHACK)WBDefaults.def
$(NETHACK)WBDefaults.def:
	echo to $(NETHACK)WBDefaults.def

WBH	= $(AMI)wbdefs.h $(AMI)wbstruct.h $(AMI)wbprotos.h
ASP	= $(AMI)splitter
$(OO)wb.o: $(WBH) $(AMI)wb.c $(AMI)wbwin.c $(AMI)wbdata.c $(AMI)wbgads.c \
		$(I)patchlevel.h
	$(CC) $(WBCFLAGS) $(SPLFLAGS) $(OBJSPEC)$(OO)wb.o $(AMI)wb.c

$(OO)wbx.o: $(WBH) $(AMI)wbcli.c $(AMI)wbwin.c $(AMI)wbdata.c \
		$(I)patchlevel.h $(I)date.h
	$(CC) $(WBCFLAGS) $(SPLFLAGS) $(OBJSPEC)$(OO)wbx.o $(AMI)wbcli.c

$(OO)loader.o: $(ASP)/loader.c $(ASP)/split.h $(ASP)/amiout.h $(ASP)/multi.h
	$(CC) $(WBCFLAGS) $(SPLFLAGS) $(OBJSPEC)$(OO)loader.o $(ASP)/loader.c

$(OO)multi.o: $(ASP)/multi.c $(ASP)/multi.h
	$(CC) $(WBCFLAGS) $(SPLFLAGS) $(OBJSPEC)$(OO)multi.o $(ASP)/multi.c

$(OO)cli.o: $(WBH) $(AMI)wbcli.c $(I)patchlevel.h $(I)date.h
	$(CC) $(WBCFLAGS) $(WBC2FLAGS) $(SPLFLAGS) $(OBJSPEC)$(OO)cli.o \
		$(AMI)wbcli.c

####
# splitter support
$(SBIN)splitter:	$(OO)splitter.o $(OO)arg.o
	$(LINK) $(LNSPEC) $(SBIN)splitter $(LIN) $(OO)splitter.o $(OO)arg.o \
		$(LLIB)

$(NETHACK)NetHack.dir:	$(SBIN)splitter $(SBIN)NetHack
	$(SBIN)splitter $(SBIN)NetHack

$(OO)splitter.o:	$(ASP)/splitter.c $(ASP)/split.h $(ASP)/amiout.h $(ASP)/arg.h
	$(CC) $(WBCFLAGS) $(SPLFLAGS) $(OBJSPEC)$(OO)splitter.o \
		$(ASP)/splitter.c

$(OO)arg.o:	$(ASP)/arg.c $(ASP)/arg.h
	$(CC) $(WBCFLAGS) $(SPLFLAGS) $(OBJSPEC)$(OO)arg.o $(ASP)/arg.c 

# Create/copy other stuff into NetHack: directory:

$(NETHACK)tomb.iff:	$(SBIN)xpm2iff $(AMI)grave16.xpm
	$(SBIN)xpm2iff $(AMI)grave16.xpm $(NETHACK)tomb.iff

$(OO)xpm2iff.o:	$(AMI)xpm2iff.c
	$(CC) $(CFLAGS) $(INCLSPEC)$(WSHARE) $(OBJSPEC)$@ $(AMI)xpm2iff.c

$(SBIN)xpm2iff:	$(OO)xpm2iff.o
	$(LINK) $(LNSPEC) $@ $(LIN) $(OO)xpm2iff.o $(FLLIB)

# Tile installation for the tile version of the game
inst-tiles: $(TILEFILES)

#SFD_INSTEAD $(NETHACK)tiles: $(NETHACK)tiles
$(NETHACK)tiles:
	-makedir $(NETHACK)tiles

$(OO)txt2iff.o:	$(AMI)txt2iff.c
	$(CC) $(CFLAGS) $(CSYM) $(INCLSPEC)$(WSHARE) $(OBJSPEC)$@ \
		$(AMI)txt2iff.c

$(OO)ppmwrite.o: $(WSHARE)ppmwrite.c
	$(CC) $(CFLAGS) $(CSYM) $(INCLSPEC)$(WSHARE) $(OBJSPEC)$@ $(WSHARE)ppmwrite.c

$(OO)tiletext.o:	$(WSHARE)tiletext.c $(I)config.h $(WSHARE)tile.h
	$(CC) $(CFLAGS) $(CSYM) $(INCLSPEC)$(WSHARE) $(OBJSPEC)$@ $(WSHARE)tiletext.c

$(OO)tiletxt.o:	$(WSHARE)tilemap.c $(I)hack.h
	$(CC) $(CFLAGS) $(CSYM) $(DEFSPEC)TILETEXT $(INCLSPEC)$(WSHARE) $(OBJSPEC)$@ $(WSHARE)tilemap.c

NAMEOBJS = $(O)drawing.o $(O)decl.o $(O)monst.o $(O)objects.o

$(SBIN)txt2ppm:	$(OO)ppmwrite.o $(NAMEOBJS) $(O)alloc.o $(OO)panic.o $(OO)tiletext.o $(OO)tiletxt.o
	$(LINK) $(LNSPEC) $@ $(LIN) $(OO)ppmwrite.o $(NAMEOBJS) $(OO)tiletext.o $(OO)tiletxt.o $(O)alloc.o $(OO)panic.o $(FLLIB)

$(SBIN)txt2iff: $(OO)txt2iff.o $(NAMEOBJS) $(OO)tiletext.o $(OO)tiletxt.o
	$(LINK) $(LNSPEC) $@ $(LIN) $(OO)txt2iff.o $(NAMEOBJS) $(OO)tiletext.o \
		$(OO)tiletxt.o  $(FLLIB)

$(NETHACK)tiles/objects.iff: $(WSHARE)objects.txt $(SBIN)txt2iff
	$(SBIN)txt2iff $(WSHARE)objects.txt $(NETHACK)tiles/objects.iff

$(NETHACK)tiles/monsters.iff: $(WSHARE)monsters.txt $(SBIN)txt2iff
	$(SBIN)txt2iff $(WSHARE)monsters.txt $(NETHACK)tiles/monsters.iff

$(NETHACK)tiles/other.iff: $(WSHARE)other.txt $(SBIN)txt2iff
	$(SBIN)txt2iff $(WSHARE)other.txt $(NETHACK)tiles/other.iff

inst-dungeon: $(INSTDUNGEONFILES)

$(NETHACK)options : $(DAT)options
	copy $(DAT)options $@

# Create compiled dungeon files
BGM= $(SLIB)bigrm-2.lev $(SLIB)bigrm-3.lev $(SLIB)bigrm-4.lev $(SLIB)bigrm-5.lev
$(BGM):	$(SLIB)bigrm-1.lev

$(SLIB)bigrm-1.lev: $(DAT)bigroom.des $(SBIN)lev_comp
#SFD_INSTEAD $(SBIN)lev_comp $(DAT)bigroom.des
#none

$(SLIB)castle.lev:  $(DAT)castle.des $(SBIN)lev_comp

ENDGAME1= $(SLIB)air.lev $(SLIB)earth.lev $(SLIB)fire.lev $(SLIB)water.lev
$(ENDGAME1):	$(SLIB)astral.lev

$(SLIB)astral.lev:	$(DAT)endgame.des $(SBIN)lev_comp
#SFD_INSTEAD $(SBIN)lev_comp $(DAT)endgame.des
#none

GEHENNOM1= $(SLIB)asmodeus.lev $(SLIB)baalz.lev $(SLIB)juiblex.lev \
  $(SLIB)orcus.lev $(SLIB)sanctum.lev 
$(GEHENNOM1):	$(SLIB)valley.lev

$(SLIB)valley.lev:	$(DAT)gehennom.des $(SBIN)lev_comp
#SFD_INSTEAD $(SBIN)lev_comp $(DAT)gehennom.des
#none

$(SLIB)knox.lev: $(DAT)knox.des $(SBIN)lev_comp
#SFD_INSTEAD $(SBIN)lev_comp $(DAT)knox.des
#none

MINES1= $(SLIB)minend-1.lev $(SLIB)minend-2.lev $(SLIB)minetn-1.lev $(SLIB)minetn-2.lev
$(MINES1): $(SLIB)minefill.lev

$(SLIB)minefill.lev: $(DAT)mines.des $(SBIN)lev_comp
#SFD_INSTEAD $(SBIN)lev_comp $(DAT)mines.des
#none

$(SLIB)oracle.lev: $(DAT)oracle.des $(SBIN)lev_comp
#SFD_INSTEAD $(SBIN)lev_comp $(DAT)oracle.des
#none

TOWER1= $(SLIB)tower1.lev $(SLIB)tower2.lev
$(TOWER1): $(SLIB)tower3.lev

$(SLIB)tower3.lev: $(DAT)tower.des $(SBIN)lev_comp
#SFD_INSTEAD $(SBIN)lev_comp $(DAT)tower.des
#none

WIZARD1= $(SLIB)wizard1.lev $(SLIB)wizard2.lev $(SLIB)wizard3.lev \
	$(SLIB)fakewiz1.lev
$(WIZARD1):  $(SLIB)fakewiz2.lev

$(SLIB)fakewiz2.lev:  $(DAT)yendor.des $(SBIN)lev_comp
#SFD_INSTEAD $(SBIN)lev_comp $(DAT)yendor.des
#none

MEDUSA1= $(SLIB)medusa-1.lev
$(MEDUSA1): $(SLIB)medusa-2.lev

$(SLIB)medusa-2.lev:	$(DAT)medusa.des $(SBIN)lev_comp
#SFD_INSTEAD $(SBIN)lev_comp $(DAT)medusa.des
#none

SOKOBAN1= $(SLIB)soko1-1.lev $(SLIB)soko1-2.lev $(SLIB)soko2-1.lev \
	$(SLIB)soko2-2.lev $(SLIB)soko3-1.lev $(SLIB)soko3-2.lev \
	$(SLIB)soko4-1.lev
$(SOKOBAN1): $(SLIB)soko4-2.lev

$(SLIB)soko4-2.lev: $(DAT)sokoban.des $(SBIN)lev_comp
#SFD_INSTEAD $(SBIN)lev_comp $(DAT)sokoban.des
#none

$(ADFILES1):	$(SLIB)Arc-goal.lev

$(SLIB)Arc-goal.lev:	$(DAT)Arch.des $(SBIN)lev_comp
#SFD_INSTEAD $(SBIN)lev_comp $(DAT)Arch.des
#none

$(BDFILES1):	$(SLIB)Bar-goal.lev

$(SLIB)Bar-goal.lev:	$(DAT)Barb.des $(SBIN)lev_comp
#SFD_INSTEAD $(SBIN)lev_comp $(DAT)Barb.des
#none

$(CDFILES1):	$(SLIB)Cav-goal.lev

$(SLIB)Cav-goal.lev:	$(DAT)Caveman.des $(SBIN)lev_comp
#SFD_INSTEAD $(SBIN)lev_comp $(DAT)Caveman.des
#none

$(HDFILES1):	$(SLIB)Hea-goal.lev

$(SLIB)Hea-goal.lev:	$(DAT)Healer.des $(SBIN)lev_comp
#SFD_INSTEAD $(SBIN)lev_comp $(DAT)Healer.des
#none

$(KDFILES1):	$(SLIB)Kni-goal.lev

$(SLIB)Kni-goal.lev:	$(DAT)Knight.des $(SBIN)lev_comp
#SFD_INSTEAD $(SBIN)lev_comp $(DAT)Knight.des
#none

$(MDFILES1):	$(SLIB)Mon-goal.lev

$(SLIB)Mon-goal.lev:	$(DAT)Monk.des $(SBIN)lev_comp
#SFD_INSTEAD $(SBIN)lev_comp $(DAT)Monk.des
#none

$(PDFILES1):	$(SLIB)Pri-goal.lev

$(SLIB)Pri-goal.lev:	$(DAT)Priest.des $(SBIN)lev_comp
#SFD_INSTEAD $(SBIN)lev_comp $(DAT)Priest.des
#none

$(RDFILES1):	$(SLIB)Rog-goal.lev

$(SLIB)Rog-goal.lev:	$(DAT)Rogue.des $(SBIN)lev_comp
#SFD_INSTEAD $(SBIN)lev_comp $(DAT)Rogue.des
#none

$(RANFILES1):	$(SLIB)Ran-goal.lev

$(SLIB)Ran-goal.lev:	$(DAT)Ranger.des $(SBIN)lev_comp
#SFD_INSTEAD $(SBIN)lev_comp $(DAT)Ranger.des
#none

$(SDFILES1):	$(SLIB)Sam-goal.lev

$(SLIB)Sam-goal.lev:	$(DAT)Samurai.des $(SBIN)lev_comp
#SFD_INSTEAD $(SBIN)lev_comp $(DAT)Samurai.des
#none

$(TDFILES1):	$(SLIB)Tou-goal.lev

$(SLIB)Tou-goal.lev:	$(DAT)Tourist.des $(SBIN)lev_comp
#SFD_INSTEAD $(SBIN)lev_comp $(DAT)Tourist.des
#none

$(VDFILES1):	$(SLIB)Val-goal.lev

$(SLIB)Val-goal.lev:	$(DAT)Valkyrie.des $(SBIN)lev_comp
#SFD_INSTEAD $(SBIN)lev_comp $(DAT)Valkyrie.des
#none

$(WDFILES1):	$(SLIB)Wiz-goal.lev

$(SLIB)Wiz-goal.lev:	$(DAT)Wizard.des $(SBIN)lev_comp
#SFD_INSTEAD $(SBIN)lev_comp $(DAT)Wizard.des
#none

$(SLIB)dungeon:  $(DAT)dungeon.def $(SBIN)makedefs $(SBIN)dgn_comp
	$(SBIN)makedefs -e
	$(SBIN)dgn_comp $(DAT)dungeon.pdf
	copy $(DAT)dungeon $(SLIB)dungeon
	delete $(DAT)dungeon

inst-data: $(INSTDATAFILES)

$(NETHACK)amii.hlp: $(AMI)amii.hlp
	copy $(AMI)amii.hlp $@

#$(NETHACK)data:  $(DAT)data
#	copy $(DAT)data $@

$(SLIB)data:  $(DAT)data.base $(I)config.h $(SBIN)makedefs
	$(SBIN)makedefs -d

#$(NETHACK)rumors:  $(DAT)rumors
#	copy $(DAT)rumors $@

$(SLIB)rumors:  $(DAT)rumors.tru $(DAT)rumors.fal $(SBIN)makedefs
	$(SBIN)makedefs -r

$(SLIB)cmdhelp:  $(DAT)cmdhelp
	copy $(DAT)cmdhelp $@

$(SLIB)help:  $(DAT)help
	copy $(DAT)help $@

$(SLIB)hh:  $(DAT)hh
	copy $(DAT)hh $@

$(NETHACK)HackWB.hlp: $(AMI)HackWB.hlp
	copy $(AMI)HackWB.hlp $@

$(SLIB)history:  $(DAT)history
	copy $(DAT)history $@

$(NETHACK)license:  $(DAT)license
	copy $(DAT)license $@

$(SLIB)opthelp:  $(DAT)opthelp
	copy $(DAT)opthelp $@

$(NETHACK)Recover.txt: $(DOC)Recover.txt
	copy $(DOC)Recover.txt $@

$(NETHACK)GuideBook.txt: $(DOC)GuideBook.txt
	copy $(DOC)GuideBook.txt $@

$(NETHACK)NetHack.txt: $(DOC)NetHack.txt
	copy $(DOC)NetHack.txt $@

$(NETHACK)Install.ami: $(AMI)Install.ami
	copy $(AMI)Install.ami $@

#SFD_INSTEAD $(NETHACK)logfile: $(NETHACK)logfile
$(NETHACK)logfile:
	echo to $@

#SFD_INSTEAD $(NETHACK)record: $(NETHACK)record
$(NETHACK)record:
	echo to $@

$(SLIB)wizhelp: $(DAT)wizhelp
	copy $(DAT)wizhelp $@

# Create the directories here because NetHack.cnf puts them there by default
$(NETHACK)NetHack.cnf:  $(AMI)NetHack.cnf
	copy $(AMI)NetHack.cnf $@
	-makedir $(NETHACK)save
	-makedir $(NETHACK)levels

#SFD_BEGIN
#SFD_ELSE
$(O)NetHack.gst: $(GSTSRC) $(I)hack.h
	sc makegst=$(GSTFILE) $(CFLAGS) $(GSTSRC)
#SFD_END

# Unpack and install fonts

INSTFONTFILES= 	$(NETHACK)hack.font $(NETHACK)hack $(NETHACK)hack/8

inst-fonts: $(INSTFONTFILES)

$(NETHACK)hack/8:  $(AMI)amifont8.uu $(NETHACK)hack
	$(UUDEC) $(AMI)amifont8.uu
	copy 8 $(NETHACK)hack/8
	delete 8

$(NETHACK)hack.font:  $(AMI)amifont.uu
	$(UUDEC) $(AMI)amifont.uu
	copy hack.font $(NETHACK)hack.font
	delete hack.font

#SFD_INSTEAD $(NETHACK)hack: $(NETHACK)hack
$(NETHACK)hack:
	-makedir $@

INSTICONFILES= \
	$(NETHACK)default.icon $(NETHACK)NetHack.info $(NETHACK)NewGame.info \
	$(NETHACK)HackWB.info

inst-icons: $(INSTICONFILES)

# Unpack the icons into place

$(NETHACK)default.icon:  $(AMI)dflticon.uu
	$(UUDEC) $(AMI)dflticon.uu
#	copy default.icon $(NETHACK)default.icon
#	delete default.icon

$(NETHACK)NetHack.info:  $(AMI)NHinfo.uu
	$(UUDEC) $(AMI)NHinfo.uu
#	copy NetHack.info $(NETHACK)NetHack.info
#	delete NetHack.info

$(NETHACK)NewGame.info:  $(AMI)NewGame.uu
	$(UUDEC) $(AMI)NewGame.uu
#	copy NewGame.info $(NETHACK)NewGame.info
#	delete NewGame.info

$(NETHACK)HackWB.info:  $(AMI)HackWB.uu
	$(UUDEC) $(AMI)HackWB.uu
#	copy HackWB.info $(NETHACK)HackWB.info
#	delete HackWB.info

# If DLB is defined, create the nhdat library file in the playground
# directory.  If not, move all the data files there.
$(NETHACK)nhdat:  $(LIBFILES) $(SBIN)dlb
	list to T:nhdat.lst $(SLIB) QUICK NOHEAD FILES
	echo  >T:make-nhdat $(SBIN)dlb cCfI $(SLIB) $(NETHACK)nhdat T:nhdat.lst
	echo >>T:make-nhdat if not exists $(NETHACK)nhdat
	echo >>T:make-nhdat copy $(SLIB)\#? $(NETHACK)
	echo >>T:make-nhdat endif
	execute T:make-nhdat
	-delete T:make-nhdat

# DO NOT DELETE THIS LINE

$(O)allmain.o:  $(NHS)allmain.c $(HDEP)

$(O)alloc.o:  $(NHS)alloc.c $(I)config.h

$(O)apply.o:  $(NHS)apply.c $(HDEP)
#SFD_INSTEAD #none
	$(CC) $(CFLAGS) $(CFLAGS2) $(OBJSPEC)$@ $(NHS)apply.c

$(O)artifact.o:  $(NHS)artifact.c $(HDEP) $(I)artifact.h $(I)artilist.h

$(O)attrib.o:  $(NHS)attrib.c $(HDEP) $(I)artifact.h

$(O)ball.o: $(NHS)ball.c $(HDEP)

$(O)bones.o:  $(NHS)bones.c $(HDEP)

$(O)botl.o:	$(NHS)botl.c $(HDEP)

$(O)cmd.o:  $(NHS)cmd.c $(HDEP) $(I)func_tab.h

$(O)dbridge.o:  $(NHS)dbridge.c $(HDEP)

$(O)decl.o:  $(NHS)decl.c $(HDEP) $(I)quest.h

$(O)detect.o: $(NHS)detect.c $(HDEP) $(I)artifact.h

$(O)dig.o: $(NHS)dig.c $(HDEP)

$(O)display.o:  $(NHS)display.c $(HDEP)

$(O)dlb.o: $(NHS)dlb.c $(HDEP) $(I)dlb.h

$(O)do.o:  $(NHS)do.c $(HDEP)

$(O)do_name.o:  $(NHS)do_name.c $(HDEP)

$(O)do_wear.o:  $(NHS)do_wear.c $(HDEP)

$(O)dog.o:  $(NHS)dog.c $(HDEP)

$(O)dogmove.o:  $(NHS)dogmove.c $(HDEP) $(I)mfndpos.h

$(O)dokick.o:  $(NHS)dokick.c $(HDEP)

$(O)dothrow.o:  $(NHS)dothrow.c $(HDEP)

$(O)drawing.o:  $(NHS)drawing.c $(HDEP) $(I)tcap.h
	$(CC) $(CFLAGS) $(CFLAGS2) $(OBJSPEC)$@ $(NHS)drawing.c

$(O)dungeon.o:  $(NHS)dungeon.c $(HDEP) $(I)dgn_file.h $(I)dlb.h

$(O)eat.o:  $(NHS)eat.c $(HDEP)

$(O)end.o:  $(NHS)end.c $(HDEP) $(I)dlb.h

$(O)engrave.o:  $(NHS)engrave.c $(HDEP)

$(O)exper.o:  $(NHS)exper.c $(HDEP)

$(O)explode.o:  $(NHS)explode.c $(HDEP)

$(O)extralev.o:  $(NHS)extralev.c $(HDEP)

$(O)files.o:  $(NHS)files.c $(HDEP) $(I)dlb.h $(I)date.h

$(O)fountain.o:  $(NHS)fountain.c $(HDEP)

$(O)hack.o:  $(NHS)hack.c $(HDEP)

$(O)hacklib.o:  $(NHS)hacklib.c $(HDEP)

$(O)invent.o:  $(NHS)invent.c $(HDEP) $(I)artifact.h

$(O)light.o:  $(NHS)light.c $(HDEP)

$(O)lock.o:  $(NHS)lock.c $(HDEP)

$(O)mail.o:  $(NHS)mail.c $(HDEP) $(I)mail.h

$(O)makemon.o:  $(NHS)makemon.c $(HDEP)

$(O)mapglyph.o:  $(NHS)mapglyph.c $(HDEP)

$(O)mcastu.o:  $(NHS)mcastu.c $(HDEP)

$(O)mhitm.o:  $(NHS)mhitm.c $(HDEP) $(I)artifact.h

$(O)mhitu.o:  $(NHS)mhitu.c $(HDEP) $(I)artifact.h
	$(CC) $(CFLAGS) $(CFLAGS2) $(OBJSPEC)$@ $(NHS)mhitu.c

$(O)minion.o:  $(NHS)minion.c $(HDEP)

$(O)mklev.o:  $(NHS)mklev.c $(HDEP)

$(O)mkmap.o:  $(NHS)mkmap.c $(HDEP) $(I)sp_lev.h

$(O)mkmaze.o:  $(NHS)mkmaze.c $(HDEP) $(I)sp_lev.h

$(O)mkobj.o:  $(NHS)mkobj.c $(HDEP) $(I)artifact.h $(I)prop.h

$(O)mkroom.o:  $(NHS)mkroom.c $(HDEP)

$(O)mon.o:  $(NHS)mon.c $(HDEP) $(I)mfndpos.h

$(O)mondata.o:  $(NHS)mondata.c $(HDEP)

$(O)monmove.o:  $(NHS)monmove.c $(HDEP) $(I)mfndpos.h $(I)artifact.h

$(O)monst.o:  $(NHS)monst.c $(I)config.h $(I)permonst.h $(I)monsym.h $(I)color.h

$(O)monstr.o:  $(NHS)monstr.c $(HDEP)
#SFD_INSTEAD 	$(CC) $(CFLAGS) $(OBJSPEC)%(left) $(NHS)monstr.c
#none

$(O)mplayer.o:	$(NHS)mplayer.c $(HDEP)

$(O)mthrowu.o:  $(NHS)mthrowu.c $(HDEP)

$(O)muse.o:	$(NHS)muse.c $(HDEP)
	$(CC) $(CFLAGS) $(CFLAGS2) $(OBJSPEC)$@ $(NHS)muse.c

$(O)music.o:  $(NHS)music.c $(HDEP) #interp.c

$(O)o_init.o:  $(NHS)o_init.c $(HDEP)

$(O)objects.o:  $(NHS)objects.c $(I)config.h $(I)obj.h $(I)objclass.h \
		$(I)prop.h $(I)skills.h $(I)color.h
#SFD_INSTEAD #none
	$(CC) $(CFLAGS) $(INCLSPEC)$(NHS) $(OBJSPEC)$@ $(NHS)objects.c

$(O)objnam.o:  $(NHS)objnam.c $(HDEP)

$(O)options.o:  $(NHS)options.c $(HDEP) $(I)tcap.h $(I)config.h \
		$(I)objclass.h $(I)flag.h

$(O)pager.o:  $(NHS)pager.c $(HDEP) $(I)dlb.h

$(O)pickup.o:  $(NHS)pickup.c $(HDEP)

$(O)pline.o:	$(NHS)pline.c $(HDEP)

$(O)polyself.o:  $(NHS)polyself.c $(HDEP)

$(O)potion.o:  $(NHS)potion.c $(HDEP)

$(O)pray.o:  $(NHS)pray.c $(HDEP)

$(O)priest.o:  $(NHS)priest.c $(HDEP) $(I)mfndpos.h

$(O)quest.o:	$(NHS)quest.c $(HDEP) $(I)quest.h

$(O)questpgr.o: $(NHS)questpgr.c $(HDEP) $(I)dlb.h

$(O)read.o:  $(NHS)read.c $(HDEP)

$(O)rect.o:	$(NHS)rect.c $(HDEP)

$(O)region.o:	$(NHS)region.c $(HDEP)

$(O)restore.o:  $(NHS)restore.c $(HDEP) $(I)tcap.h $(I)quest.h

$(O)rnd.o:  $(NHS)rnd.c $(HDEP)

$(O)role.o:	$(NHS)role.c $(HDEP)

$(O)rumors.o:  $(NHS)rumors.c $(HDEP) $(I)dlb.h

$(O)save.o:  $(NHS)save.c $(HDEP) $(I)quest.h

$(O)shk.o:  $(NHS)shk.c $(HDEP)
#SFD_INSTEAD #none
	$(CC) $(CFLAGS) $(CFLAGS2) $(OBJSPEC)$@ $(NHS)shk.c

$(O)shknam.o:  $(NHS)shknam.c $(HDEP)

$(O)sit.o:  $(NHS)sit.c $(HDEP) $(I)artifact.h

$(O)sounds.o:  $(NHS)sounds.c $(HDEP)

$(O)sp_lev.o:  $(NHS)sp_lev.c $(HDEP) $(I)sp_lev.h $(I)rect.h $(I)dlb.h

$(O)spell.o:  $(NHS)spell.c $(HDEP)

$(O)steal.o:  $(NHS)steal.c $(HDEP)

$(O)steed.o:	$(NHS)steed.c $(HDEP)

$(O)sys.o:	$(NHS)sys.c $(HDEP)

$(O)teleport.o:	$(NHS)teleport.c $(HDEP)

$(O)timeout.o:  $(NHS)timeout.c $(HDEP)

$(O)topten.o:  $(NHS)topten.c $(HDEP) $(I)dlb.h

$(O)track.o:  $(NHS)track.c $(HDEP)

$(O)trap.o:  $(NHS)trap.c $(HDEP)
#SFD_INSTEAD #none
	$(CC) $(CFLAGS) $(CFLAGS2) $(OBJSPEC)$@ $(NHS)trap.c

$(O)u_init.o:  $(NHS)u_init.c $(HDEP)

$(O)uhitm.o:  $(NHS)uhitm.c $(HDEP)
	$(CC) $(CFLAGS) $(CFLAGS2) $(OBJSPEC)$@ $(NHS)uhitm.c

$(O)vault.o:  $(NHS)vault.c $(HDEP)

$(O)version.o:  $(NHS)version.c $(HDEP) $(I)date.h $(I)patchlevel.h

# DMake doesn't grok mid-line comments
#SFD_INSTEAD $(O)vision.o:  $(NHS)vision.c $(HDEP)
$(O)vision.o:  $(NHS)vision.c $(HDEP) #$(I)vis_tab.h

$(O)weapon.o:  $(NHS)weapon.c $(HDEP)

$(O)were.o:  $(NHS)were.c $(HDEP)

$(O)wield.o:  $(NHS)wield.c $(HDEP)

$(O)windows.o:  $(NHS)windows.c $(HDEP) $(I)wintty.h

$(O)wizard.o:  $(NHS)wizard.c $(HDEP)

$(O)worm.o:  $(NHS)worm.c $(HDEP)

$(O)worn.o:  $(NHS)worn.c $(HDEP)

$(O)write.o:  $(NHS)write.c $(HDEP)

$(O)zap.o:  $(NHS)zap.c $(HDEP)
	$(CC) $(CFLAGS) $(CFLAGS2) $(OBJSPEC)$@ $(NHS)zap.c

$(O)getline.o:	$(TTY)getline.c $(HDEP) $(I)wintty.h

$(O)termcap.o:	$(TTY)termcap.c $(HDEP) $(I)wintty.h $(I)tcap.h

$(O)topl.o:	$(TTY)topl.c $(HDEP) $(I)wintty.h $(I)tcap.h

$(O)wintty.o:	$(TTY)wintty.c $(HDEP) $(I)wintty.h $(I)tcap.h \
		$(I)date.h $(I)patchlevel.h

$(O)amitty.o:	$(AMI)amitty.c $(HDEP)

$(O)amistack.o:	$(AMI)amistack.c
	$(CC) $(CFLAGS3) $(CSYM) $(OBJSPEC)$@ $(AMI)amistack.c

$(O)rip.o:	$(NHS)rip.c $(HDEP)


$(I)config.h:  $(I)config1.h $(I)tradstdc.h $(I)global.h
	-setdate $(I)config.h
	-wait 2

# onames.h handled at onames.h target, pm.h

$(I)decl.h:  $(I)quest.h $(I)spell.h $(I)color.h $(I)obj.h $(I)you.h
	-setdate $(I)decl.h
	-wait 2

$(I)global.h:  $(I)coord.h $(I)pcconf.h $(I)amiconf.h
	-setdate $(I)global.h
	-wait 2

$(I)hack.h:  $(I)config.h $(I)context.h $(I)trap.h $(I)decl.h $(I)dungeon.h \
		$(I)monsym.h $(I)mkroom.h $(I)objclass.h $(I)flag.h $(I)rm.h \
		$(I)vision.h $(I)display.h $(I)wintype.h $(I)engrave.h \
		$(I)rect.h $(I)region.h $(I)sys.h
	-setdate $(I)hack.h
	-wait 2

$(I)permonst.h:  $(I)monattk.h $(I)monflag.h $(I)align.h
	-setdate $(I)permonst.h
	-wait 2

$(I)you.h:  $(I)align.h $(I)attrib.h $(I)monst.h $(I)mextra.h $(I)youprop.h $(I)skills.h
	-setdate $(I)you.h
	-wait 2

# pm.h handled at target

$(I)youprop.h:  $(I)prop.h $(I)permonst.h $(I)mondata.h
	-setdate $(I)youprop.h
	-wait 2

$(I)display.h: $(I)vision.h $(I)mondata.h
	-setdate $(I)display.h
	-wait 2

$(I)dungeon.h: $(I)align.h
	-setdate $(I)dungeon.h
	-wait 2

$(I)engrave.h: $(I)rect.h
	-setdate $(I)engrave.h
	-wait 2

$(I)mextra.h: $(I)align.h
	-setdate $(I)mextra.h
	-wait 2

$(I)mondata.h: $(I)align.h
	-setdate $(I)mondata.h
	-wait 2

$(I)monst.h: $(I)align.h $(I)mextra.h
	-setdate $(I)monst.h
	-wait 2

$(I)pcconf.h: $(I)micro.h $(I)system.h
	-setdate $(I)pcconf.h
	-wait 2

$(I)rm.h: $(I)align.h
	-setdate $(I)rm.h
	-wait 2


#notes
#  install keeps doing re-install because it keeps rebuilding lev_comp???
#  fixed(?) - deleted setdate
#  make nhdat rebuils sys/amiga objects
