# Makefile for WIN32 platform using Borland C++
VER      = 5
DRV      = D:
SRC      = .
OS       = win32_bc
#
BIN      = $(DRV)\BC$(VER)\BIN
LIB      = $(DRV)\BC$(VER)\LIB
INC      = $(DRV)\BC$(VER)\INCLUDE
#
RC       = $(BIN)\BRC32
CC       = $(BIN)\BCC32
TLINK    = $(BIN)\TLINK32
TLIB     = $(BIN)\TLIB
STRIP    = $(BIN)\TDSTRP32
IMPLIB   = $(BIN)\IMPLIB
#
#
CFLAGS   = -3 -Ox -w -H -P-c -I$(SRCPATH) -DASM
#
DEFS     = -I$(INC) -DWIN32 
#
ALGO      = mars
CIPHER    = cipher
TESTVK    = testvk
TESTVT    = testvt
BENCH     = bench
TEST      = test
DIFF      = cmp
RM        = del
#
ALIBS    = cw32 import32 $(ALGO)
DLIBS    = cw32 import32
#
LINKA    = $(TLINK) /w!/ap/x/Tpe/L$(LIB)
LINKD    = $(TLINK) /w!/aa/x/Tpd/L$(LIB)
#

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

$(TESTVK): $@.obj $(ALGO).lib
	@echo Building $@
 	$(LINKA) c0x32 $@, $@,,$(ALIBS),$(SRC)\$@.def
	@.\$@ >$@.txt

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

$(TESTVT): $@.obj $(ALGO).lib
	@echo Building $@
 	@$(LINKA) c0x32 $@, $@,,$(ALIBS),$(SRC)\$@.def
	@.\$@ >$@.txt

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

$(BENCH): $@.obj $(ALGO).lib
	@echo Building $@
	@$(LINKA) c0x32 $@, $@,,$(ALIBS),$(SRC)\$@.def

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

$(CIPHER): $@.obj $(ALGO).lib
	@echo Building $@
	@$(LINKA) c0x32 $@, $@,,$(ALIBS),$(SRC)\$@.def

$(CIPHER).obj: $(SRC)\$(CIPHER).c  $(SRC)\$(ALGO).h
	@$(CC) $(CFLAGS) -WC $(DEFS) -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 *.res $(RM) *.res
	@if exist *.exp $(RM) *.exp
	@if exist *.exe $(RM) *.exe
	@if exist *.zip $(RM) *.zip

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

