#
# This is the MAKEFILE for EasyTeX.
#
# Runs with MSC 7.0
#
LINKER    = link
ILINK     = ilink
LFLAGS_G  = /NOI /ST:8000
LFLAGS_D  = /CO /PACKC
LFLAGS_R  = /PACKC
CC        = cl
CFLAGS_G  = /c /AL /G2 /Gt16 /Gs
CFLAGS_D  = /qc /Od /Zi /DDEBUG
CFLAGS_R  = /Oslear
AFLAGS_G  =
CVFLAGS   = /2
RUNFLAGS  = /et:1234:5678

PROJPATH   = d:^\emtex^\
BACKUPPATH = a:^\
CP         = copy >nul
UNLINK     = del
PACK       = pkzip
PFLAGS     = -u -bd:^\

DEBUG=0

MODULES  = bios.module edit.module intui.module video.module main.module\
           dos.module applic.module profile.module help.module memory.module\
           filereq.module compress.module \
           texerr.module colors.module init.module smakec.module

OVLS  = main.obj init.obj intui.obj profile.obj\
        edit.obj memory.obj filereq.obj applic.obj help.obj\
        compress.obj texerr.obj colors.obj smakec.obj \

#
# This block is build when no block is specified
#
all: et.com et.ovl rdel.exe makehelp.exe et.hlp

version.inc: main.c version.c version.exe
    version -i

version.h: main.c version.c version.exe
    version -h

version.obj: version.c

bios.obj    : bios.c bios.h main.h
edit.obj    : edit.c edit.h main.h video.h
intui.obj   : intui.c intui.h video.h
video.obj   : video.c video.h
main.obj    : main.c main.h
dos.obj     : dos.c dos.h
applic.obj  : applic.c applic.h main.h
profile.obj : profile.c profile.h main.h
help.obj    : help.c help.h main.h
filereq.obj : filereq.c filereq.h main.h
makehelp.obj: makehelp.c
texerr.obj  : texerr.c texerr.h
colors.obj  : colors.c colors.h
init.obj    : init.c init.h version.h

et.obj      : et.asm version.inc
numl.obj    : numl.c dos.c

#
# How to build LIBs
#
dos.lib: video.obj bios.obj dos.obj
!IF EXIST (dos.lib)
    !lib $@ -+$? ,,;
!ELSE
    !lib , +$? ,,$@;
!ENDIF

#
# How to build ovl's
#
et.ovl: $(MODULES:.module=.obj) dos.lib makefile
!IF $(DEBUG)
  link @<<et.lrf
$(OVLS: = +^
)
$@
nul
dos.lib
$(LFLAGS_G) $(LFLAGS_D);
<<
    $(CP) et.ovl et.exe
!ELSE
  link @<<et.lrf
$(OVLS: = +^
)
$@
nul
dos.lib
$(LFLAGS_G) $(LFLAGS_R);
<<
!ENDIF

et.com: et.obj version.inc
  link et.obj, et.com, nul.map, /TINY;

rdel.exe: rdel.obj dos.obj
  link rdel.obj dos.obj,,nul,$(LFLAGS_G) $(LFLAGS_R);

numl.com: numl.obj dos.obj
  link numl.obj dos.obj,,nul,$(LFLAGS_G) $(LFLAGS_R) /COD;

makehelp.exe: makehelp.obj compress.obj
  link makehelp.obj compress.obj,,nul,$(LFLAGS_G) $(LFLAGS_R);

version.exe: version.obj dos.obj
  link version.obj dos.obj,,nul,$(LFLAGS_G) $(LFLAGS_R);

#
# Interference rule to build object-files
#
.c.obj:
!IF $(DEBUG)
  $(CC) $(CFLAGS_G) $(CFLAGS_D) $<
!ELSE
  $(CC) $(CFLAGS_G) $(CFLAGS_R) $<
!ENDIF

# applic.c cannot be compiled with minimum size options
applic.obj: applic.c
!IF $(DEBUG)
  $(CC) $(CFLAGS_G) $(CFLAGS_D) applic.c
!ELSE
  $(CC) $(CFLAGS_G) /Oslezr applic.c
!ENDIF

.asm.obj:
     masm $(AFLAGS_G) $<;

# ...and some modules wich take different options
compress.obj: compress.c compress.h
!IF $(DEBUG)
  $(CC) $(CFLAGS_G) $(CFLAGS_D) compress.c
!ELSE
  $(CC) $(CFLAGS_G) /Oxaz /Gs compress.c
!ENDIF

memory.obj: memory.c memory.h main.h
!IF $(DEBUG)
  $(CC) $(CFLAGS_G) $(CFLAGS_D) memory.c
!ELSE
  $(CC) $(CFLAGS_G) /Oxaz /Gs memory.c
!ENDIF

#
# This block runs the program itself
#
run: et.com et.ovl et.hlp
        et.ovl $(RUNFLAGS)

#
# This block invokes the debugger
#
debug: et.ovl
        copy et.ovl et.exe
        CV $(CVFLAGS) et.exe $(RUNFLAGS)
        del et.exe

#
# This block deletes all re-producable files from disk
#
clean:
    del *.obj
    del *.bak

#
# This block backs everything up
#
backup: install $(BACKUPPATH)etsrc.zip $(BACKUPPATH)help.zip \
        $(BACKUPPATH)et.zip $(BACKUPPATH)readme.txt

#
# This block compresses all source code files to the file 'etsrc.zip'
#
SRCFILES = $(MODULES:.module=.c) $(MODULES:.module=.h) \
           makefile rdel.c numl.c makehelp.c et.asm \
           macros.h setting.h topic.h version.c

$(BACKUPPATH)etsrc.zip: $(SRCFILES)
  $(PACK) $(PFLAGS) $@ @<<pkzip.lst
$(?: =^
)
<<

#
# This block compresses all help files to the file 'help.zip'
#
$(BACKUPPATH)help.zip: help.txt latexhlp.txt makehelp.exe
  $(PACK) $(PFLAGS) $@ $?


#
# This block compresses all program files to the backup directory
#
$(BACKUPPATH)et.zip: et.com et.ovl et.hlp et.map et.ico rdel.exe
  $(PACK) $(PFLAGS) $@ $?

$(BACKUPPATH)readme.txt: $$(@F)
    !$(CP) $? $@

#
# This block compresses installs all program files to the project directory
#
install: $(PROJPATH)et.com \
         $(PROJPATH)et.ovl \
         $(PROJPATH)et.hlp \
         $(PROJPATH)et.map \
         $(PROJPATH)rdel.exe \
         $(PROJPATH)makehelp.exe

$(PROJPATH)et.com $(PROJPATH)et.hlp $(PROJPATH)et.ovl $(PROJPATH)et.map \
$(PROJPATH)rdel.exe $(PROJPATH)makehelp.exe : $$(@F)
    !$(CP) $? $@

#
# How to make the help database
#
et.hlp: help.txt
  makehelp help.txt latexhlp.txt et.hlp

# end of MAKEFILE
