# MAKEFILE FOR MICROSOFT VISUAL C++
VERSION = 15
DRIVE   = E:\MSVC
BIN     = $(DRIVE)\BIN
LIB     = $(DRIVE)\LIB
INC     = $(DRIVE)\INCLUDE
OS      = dos_vc
#
CC      = $(BIN)\CL
LINK    = $(BIN)\LINK
RC      = $(BIN)\RC
IMP     = $(BIN)\IMPLIB
TLIB    = $(BIN)\LIB
SRC     = .
#
MODEL   = S # small model
CFLAGS  = /nologo /W3 /D "NDEBUG" -I$(INC) -I$(SRC)
LFLAGS  = /nologo /NOI /STACK:5120 /ONERROR:NOEXE
#
ALIB    = safer
ALGO    = safer
#
CIPHER  = cipher
TESTVK  = testvk
TESTVT  = testvt
BENCH   = bench
TEST    = test
DIFF    = cmp
RM      = del
#
TESTS   = .
#
LIBS   = $(LIB)\OLDNAMES $(LIB)\SLIBCE $(ALGO)$(MODEL)
#

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

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

$(TESTVK).obj:  $(SRC)\$(TESTVK).c  $(SRC)\$(ALGO).h
	@$(CC) $(CFLAGS) /A$(MODEL) /Fo$@ -c $(SRC)\$(TESTVK).c

$(TESTVT): $(TESTVT).obj $(ALIB)$(MODEL).lib
	@echo Building $@
	@$(LINK) $(LFLAGS) $@,$@,,$(LIBS),,

$(TESTVT).obj:  $(SRC)\$(TESTVT).c  $(SRC)\$(ALGO).h
	@$(CC) $(CFLAGS) /A$(MODEL) /Fo$@ -c $(SRC)\$(TESTVT).c

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

$(BENCH).obj: $(SRC)\$(BENCH).c $(SRC)\$(ALGO).h
	@$(CC) $(CFLAGS) /A$(MODEL) /Fo$@ -c $(SRC)\$(BENCH).c

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

$(CIPHER).obj:  $(SRC)\$(CIPHER).c  $(SRC)\$(ALGO).h
	@$(CC) $(CFLAGS) /A$(MODEL) /Fo$@ -c $(SRC)\$(CIPHER).c

$(TEST): $(CIPHER)
	@echo Testing  $(ALGO)...
	@echo Electronic Code Book (ECB) Mode
	@.\$(CIPHER) -m ecb -k sesam -q $(TESTS)\test.txt test.ecb
	@.\$(CIPHER) -d -m ecb -k sesam -q test.ecb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.ecb
	@echo Cipher Block Chaining (CBC) Mode
	@.\$(CIPHER) -m cbc -k sesam -q $(TESTS)\test.txt test.cbc
	@.\$(CIPHER) -d -m cbc -k sesam -q test.cbc test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.cbc
	@echo 8 Bit Output Feedback (OFB) Mode
	@.\$(CIPHER) -m ofb -k sesam -q $(TESTS)\test.txt test.ofb
	@.\$(CIPHER) -d -m ofb -k sesam -q test.ofb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.ofb
	@echo 8 Bit Cipher Feedback (CFB) Mode
	@.\$(CIPHER) -m cfb -k sesam -q $(TESTS)\test.txt test.cfb
	@.\$(CIPHER) -d -m cfb -k sesam -q test.cfb test.out
	@$(DIFF) $(TESTS)\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 *.*


