# Compilers and options:

# Only Masm is working!
#
# Tasm SUXX! you can't have a name with the same name in different structures!
#
ASMTYPE = masm

TASM = tasm
TASMOPTS = /ml /m3 /t
!IFEQ asmtype tasm
ASM = $(TASM) $(TASMOPTS) $*.asm,$@
!ENDIF

MASM = ml
MASMOPTS = /nologo /c /Cp
#MASMOPTS = /nologo /c /Cp /Zm /Zi
!IFEQ asmtype masm
ASM = $(MASM) $(MASMOPTS) /Fo $@ $*.asm
!ENDIF

C = wcc386
COPTS = -4s -ox -s
#COPTS = -d3 -5s -s
LIB = wlib
LIBOPTS = -c -b -q
32LINK = dlink
#32LINKOPTS = /t
32LINKOPTS = /t /C /S
4GLINK = wlink
#4GLINKOPTS = option quiet
4GLINKOPTS = option quiet debug all

TOUCH = touch

NMSLIB = nms.obj nmserr.obj auto.obj setup.obj config.obj &
         devices\dma.obj devices\imm.obj devices\timer.obj &
         devices\mix.obj devices\mix\m8m.obj devices\mix\m8s.obj devices\mix\m16m.obj devices\mix\m16s.obj devices\mix\b8m.obj devices\mix\b8s1.obj devices\mix\b8s2.obj devices\mix\b16m.obj devices\mix\b16s1.obj devices\mix\b16s2.obj &
         systems\dos32.obj systems\dos4g.obj systems\pmodew.obj &
         drivers\gus.obj drivers\awe32.obj drivers\pas.obj drivers\sb.obj drivers\wss.obj drivers\nosound.obj drivers\disk.obj &
         formats\mod.obj formats\s3m.obj formats\dsm.obj formats\xm.obj

all : .SYMBOLIC run.exe run2.exe run3.exe

###############################################################################
# DOS32 example
###############################################################################

run.exe : run.obj nms.lib module.obj
        $(32LINK) $(32LINKOPTS) run.obj module.obj ,run.exe,,nms.lib

###############################################################################
# DOS4G example (asm)
###############################################################################

run2.exe : run.obj nms.lib module.obj
        $(4GLINK) $(4GLINKOPTS) system dos4g name run2 library nms file run,module

###############################################################################
# PMODE/W example (asm)
###############################################################################

run3.exe : run.obj nms.lib module.obj
        $(4GLINK) $(4GLINKOPTS) system pmodew name run3 library nms file run,module

###############################################################################
# Delete all assembled files
###############################################################################

clean : .SYMBOLIC
	ren module.obj module.new >NUL
        del /s *.obj *.exe *.lib
	ren module.new module.obj >NUL

###############################################################################
# Assembly example
###############################################################################

run.obj : run.asm nms.inc
        $(ASM)

###############################################################################
# Main NMS Library
###############################################################################

nms.lib : $(NMSLIB)
        $(LIB) $(LIBOPTS) nms @library.lst

###############################################################################
# Interfaces
###############################################################################

nms.obj : nms.asm nms.mac nms.str nms.ext
        $(ASM)

nmserr.obj : nmserr.asm nms.mac
        $(ASM)

auto.obj : auto.asm nms.mac nms.str
        $(ASM)

setup.obj : setup.asm nms.mac
        $(ASM)

config.obj : config.asm nms.mac
        $(ASM)

###############################################################################
# Mixing Device
###############################################################################

devices\mix.obj : devices\mix.asm devices\mix.str devices\mix.ext nms.mac nms.str
        $(ASM)

devices\mix\m8m.obj : devices\mix\m8m.asm devices\mix.str devices\mix.mix
        $(ASM)
devices\mix\m8s.obj : devices\mix\m8s.asm devices\mix.str devices\mix.mix
        $(ASM)

devices\mix\m16m.obj : devices\mix\m16m.asm devices\mix.str devices\mix.mix
        $(ASM)
devices\mix\m16s.obj : devices\mix\m16s.asm devices\mix.str devices\mix.mix
        $(ASM)

devices\mix\b8m.obj : devices\mix\b8m.asm devices\mix.str devices\mix.mix
        $(ASM)
devices\mix\b8s1.obj : devices\mix\b8s1.asm devices\mix.str devices\mix.mix
        $(ASM)
devices\mix\b8s2.obj : devices\mix\b8s2.asm devices\mix.str devices\mix.mix
        $(ASM)

devices\mix\b16m.obj : devices\mix\b16m.asm devices\mix.str devices\mix.mix
        $(ASM)
devices\mix\b16s1.obj : devices\mix\b16s1.asm devices\mix.str devices\mix.mix
        $(ASM)
devices\mix\b16s2.obj : devices\mix\b16s2.asm devices\mix.str devices\mix.mix
        $(ASM)

###############################################################################
# Timer Device
###############################################################################

devices\timer.obj : devices\timer.asm devices\timer.ext nms.mac
        $(ASM)

###############################################################################
# DMA Device
###############################################################################

devices\dma.obj : devices\dma.asm devices\dma.ext nms.mac
        $(ASM)

###############################################################################
# IMM Device
###############################################################################

devices\imm.obj : devices\imm.asm devices\imm.ext nms.mac
        $(ASM)

###############################################################################
# Soundcard Drivers
###############################################################################

drivers\gus.obj : drivers\gus.asm nms.mac nms.str nms.ext devices\dma.ext
        $(ASM)

drivers\awe32.obj : drivers\awe32.asm nms.mac nms.str nms.ext
        $(ASM)

drivers\pas.obj : drivers\pas.asm nms.mac nms.str nms.ext devices\dma.ext devices\mix.ext devices\mix.str devices\timer.ext
        $(ASM)

drivers\sb.obj : drivers\sb.asm nms.mac nms.str nms.ext devices\dma.ext devices\mix.ext devices\mix.str devices\timer.ext
        $(ASM)

drivers\wss.obj : drivers\wss.asm nms.mac nms.str nms.ext devices\dma.ext devices\mix.ext devices\mix.str devices\timer.ext
        $(ASM)

drivers\disk.obj : drivers\disk.asm nms.mac nms.str nms.ext devices\mix.ext devices\mix.str
        $(ASM)

drivers\nosound.obj : drivers\nosound.asm nms.mac nms.str nms.ext devices\timer.ext
        $(ASM)

###############################################################################
# Module formats
###############################################################################

formats\mod.obj : formats\mod.asm nms.mac nms.str nms.ext
        $(ASM)

formats\s3m.obj : formats\s3m.asm nms.mac nms.str nms.ext
        $(ASM)

formats\dsm.obj : formats\dsm.asm nms.mac nms.str nms.ext
        $(ASM)

formats\xm.obj : formats\xm.asm nms.mac nms.str nms.ext
        $(ASM)

###############################################################################
# Pmode Systems
###############################################################################

systems\dos32.obj : systems\dos32.asm nms.mac nms.ext
        $(ASM)

systems\dos4g.obj : systems\dos4g.asm nms.mac nms.ext
        $(ASM)

systems\pmodew.obj : systems\pmodew.asm nms.mac nms.ext
        $(ASM)


