# Makefile for compiling the DOS libraries unsing Borland C++ v3.1
VERSION = 31
DRIVE   = D:
BIN     = $(DRIVE)\bc$(VERSION)\bin
LIB     = $(DRIVE)\bc$(VERSION)\lib
INC     = $(DRIVE)\bc$(VERSION)\include
OS      = dos_bc
#
CC      = $(BIN)\bcc
TLINK   = $(BIN)\tlink
TLIB    = $(BIN)\tlib
STRIP   = $(BIN)\tdstrip
SRC     = .
#
MODEL   = s
CFLAGS  = -3 -Ox -w! -H -P-c -I$(INC) -I$(SRC) -DASM 
LFLAGS  = /3 /P- /Tde /x /L$(LIB)
#
ALIB    = safer
ALGO    = safer
#
CIPHER  = cipher
TESTVK  = testvk
TESTVT  = testvt
BENCH   = bench
TEST    = test
DIFF    = cmp
RM      = del
#
LIBS    = $(ALIB)$(MODEL) emu math$(MODEL) c$(MODEL)
#

all: $(TESTVK) $(TESTVT) $(CIPHER) $(BENCH) $(TEST)


$(TESTVK): $(TESTVK).obj $(ALIB)$(MODEL).lib
	@echo Building $@
	@$(TLINK) $(LFLAGS) c0$(MODEL) $@,$@,,$(LIBS)

$(TESTVK).obj:  $(SRC)\$(TESTVK).c  $(SRC)\$(ALGO).h
	@$(CC) $(CFLAGS) -m$(MODEL) -o$@ -c $(SRC)\$(TESTVK).c

$(TESTVT): $(TESTVT).obj $(ALIB)$(MODEL).lib
	@echo Building $@

$(TESTVT).obj: $(SRC)\$(TESTVT).c $(SRC)\$(ALGO).h
	@$(CC) $(CFLAGS) -m$(MODEL) -o$@ -c $(SRC)\$(TESTVT).c

$(BENCH): $(BENCH).obj $(ALIB)$(MODEL).lib
	@echo Building $@
	@$(TLINK) $(LFLAGS) c0$(MODEL) $@,$@,,$(LIBS)

$(BENCH).obj: $(SRC)\$(BENCH).c $(SRC)\$(ALGO).h
	@$(CC) $(CFLAGS) -m$(MODEL) -o$@ -c $(SRC)\$(BENCH).c

$(CIPHER): $(CIPHER).obj $(ALIB)$(MODEL).lib
	@echo Building $@
	@$(TLINK) $(LFLAGS) c0$(MODEL) $@,$@,,$(LIBS)

$(CIPHER).obj:  $(SRC)\$(CIPHER).c  $(SRC)\$(ALGO).h
	@$(CC) $(CFLAGS) -m$(MODEL) -o$@ -c $(SRC)\$(CIPHER).c

$(TEST): $(CIPHER)
	@echo Testing  $(ALGO)...
	@echo Electronic Code Book (ECB) Mode
	@.\$(CIPHER) -m ecb -k sesam -q $(SRC)\test.txt test.ecb
	@.\$(CIPHER) -d -m ecb -k sesam -q test.ecb test.out
	@$(DIFF) $(SRC)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.ecb
	@echo Cipher Block Chaining (CBC) Mode
	@.\$(CIPHER) -m cbc -k sesam -q $(SRC)\test.txt test.cbc
	@.\$(CIPHER) -d -m cbc -k sesam -q test.cbc test.out
	@$(DIFF) $(SRC)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.cbc
	@echo 8 Bit Output Feedback (OFB) Mode
	@.\$(CIPHER) -m ofb -k sesam -q $(SRC)\test.txt test.ofb
	@.\$(CIPHER) -d -m ofb -k sesam -q test.ofb test.out
	@$(DIFF) $(SRC)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.ofb
	@echo 8 Bit Cipher Feedback (CFB) Mode
	@.\$(CIPHER) -m cfb -k sesam -q $(SRC)\test.txt test.cfb
	@.\$(CIPHER) -d -m cfb -k sesam -q test.cfb test.out
	@$(DIFF) $(SRC)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.cfb
	@echo Build successful :-)

clean:
	@if exist *.map $(RM) *.map
	@if exist *.obj $(RM) *.obj
	@if exist *.exe $(RM) *.exe
	@if exist *.bak $(RM) *.bak
	@if exist *.zip $(RM) *.zip

zip:
	@zip -X $(ALGO)_$(OS).zip *.*


