# MSDOS make file for 100-digit libraries:
#
#	qfloata.lib	Strictly-rounded version
#	qfloatb.lib	Non-Strictly-rounded Fairly-Fast version
#	qfloatf.lib	Non-Strictly-rounded Fastest version

ANSIC		= -DANSIC
CFLAGS		= -c -nologo -W3 -Gy $(SIG_BITS) $(STICKY) $(MODEL)\
			$(OPTIMIZ) $(ANSIC)
LIBROOT_A	= qfloata
LIBROOT_B	= qfloatb
LIBROOT_F	= qfloatf
MODEL		= -AS
NO_OPTIMIZ	= -Od
OPTIMIZ		= -Ox -Gs
SIG_BITS	= -DU336	# -DU144
STICKY		= -DSTICKY
UFLAGS		= -c -nologo -W3 -Gy $(SIG_BITS) $(MODEL)\
			 $(NO_OPTIMIZ) $(ANSIC)

.asm.obj:
	ml /I. /Zm /c /Cx /Ta $<

.c.obj:
	cl $(CFLAGS) $<

# Objects Common to all libraries
#
OBJECTS_C = $(OBJECTS_C1) $(OBJECTS_C2)

OBJECTS_C1 = qlog.obj  qlog10.obj qexp.obj   qpow.obj  qtanh.obj qfloor.obj\
	     qflti.obj mtherr.obj qconst.obj qrand.obj qremain.obj\
	     qcos.obj  qsin.obj   qtan.obj

OBJECTS_C2 = qasin.obj	qatn.obj   qcosh.obj  qsinh.obj\
	     qacosh.obj qasinh.obj qatanh.obj qcbrt.obj cbrt.obj\
	     qjn.obj	qyn.obj    qgamma.obj

#	Objects That Produce Strictly Rounded Version
#
OBJECTS_A = $(OBJECTS_C) qsqrta.obj qflta.obj

#	Objects That Produce Faster Non-Strictly Rounded Version
#
OBJECTS_B = $(OBJECTS_C) qsqrt.obj qfltb.obj

#	Objects That Produce Fastest Non-Strictly Rounded Version
#
OBJS_ASM  = subm.obj mulr.obj divn.obj
OBJ_SQRT  = qsqrt.obj
OBJECTS_F = $(OBJECTS_C) $(OBJS_ASM) $(OBJ_SQRT)

HEADERS   =  qhead.asm qhead.h mconf.h

# Fastest version
$(LIBROOT_F).lib: $(OBJECTS_F)
	-mv -f $(LIBROOT_F).lib  $(LIBROOT_F).old	> nul
	lib /nologo $(LIBROOT_F) $(OBJECTS_C1:.obj=) ;
	lib /nologo $(LIBROOT_F) $(OBJECTS_C2:.obj=) ;
	lib /nologo $(LIBROOT_F) $(OBJS_ASM:.obj=) $(OBJ_SQRT:.obj=) ;
#	lib /nologo TmpLib_1  $(OBJECTS_C2:.obj=) ;
#	lib /nologo $(LIBROOT_F)+TmpLib_1.lib ;
#	lib /nologo TmpLib_1 $(OBJS_ASM:.obj=) $(OBJ_SQRT:.obj=) ;
#	lib /nologo $(LIBROOT_F)+TmpLib_1.lib ;
	@-rm -f $(LIBROOT_F).bak

# Medium-fast non-strictly rounded version, all C language
$(LIBROOT_B).lib: $(OBJECTS_B)
	-mv -f $(LIBROOT_B).lib $(LIBROOT_B).old	> nul
	lib /nologo $(LIBROOT_B) $(OBJECTS_C1:.obj=) ;
	lib /nologo $(LIBROOT_B) $(OBJECTS_C2:.obj=) ;
	lib /nologo $(LIBROOT_B) qsqrt.obj qfltb.obj ;
	@-rm -f $(LIBROOT_B).bak


# Strictly rounded version, all C language
$(LIBROOT_A).lib: $(OBJECTS_A)
	-mv -f $(LIBROOT_A).lib $(LIBROOT_A).old	> nul
	lib /nologo $(LIBROOT_A) $(OBJECTS_C1:.obj=) ;
	lib /nologo $(LIBROOT_A) $(OBJECTS_C2:.obj=) ;
	lib /nologo $(LIBROOT_A) qsqrt.obj qfltb.obj ;
	@-rm -f $(LIBROOT_A).bak

all: $(LIBROOT_A).lib $(LIBROOT_B).lib $(LIBROOT_F).lib

protos:
	zgmake qflt qlog qexp qpow qtanh qfloor mtherr qflta qsqrta

xcg:
	cat $(OBJECTS_A:.obj=.c) > $(TMP)all.c
	xcg $(TMP)all.c | awk -f $(HOME)/extlist.awk | sed s/^........// |\
		sed "s/ [.[]..*]$$//" | cat -n > qfloat.xcg
	del $(TMP)all.c

#qcalc.obj: qhead.h qcalc.h
#	cl $(CFLAGS) qcalc.c
cbrt.obj:	mconf.h
qacosh.obj:	qhead.h
qasinh.obj:	qhead.h
qatanh.obj:	qhead.h
qatn.obj:	qhead.h mconf.h
qcos.obj:	qhead.h
qcbrt.obj:	qhead.h
qexp.obj: 	qhead.h
	cl $(UFLAGS) qexp.c
qfloor.obj:	qhead.h mconf.h
qflta.obj:	qhead.h
qfltb.obj:	qhead.h
qflti.obj:	mconf.h  qhead.h  qtens.h

qgamma.obj:	qhead.h
qjn.obj:	mconf.h  qhead.h
qlog.obj:	qhead.h
	cl $(UFLAGS) qlog.c
qlog10.obj:	qhead.h
qpow.obj:	qhead.h mconf.h
	cl $(UFLAGS) qpow.c
qrand.obj:	qhead.h
qremain.obj:	qhead.h mconf.h
qsqrta.obj:	qhead.h mconf.h
qsqrt.obj:  	qhead.h
qtan.obj:   	qhead.h
qtanh.obj:  	qhead.h
qyn.obj:	qhead.h

subm.obj: subm.asm qhead.asm
mulr.obj: mulr.asm qhead.asm
divn.obj: divn.asm qhead.asm

qconst.obj: qconst.c qhead.h
	cl $(CFLAGS) qconst.c

mtherr.obj: mtherr.c qhead.h mconf.h
	cl $(CFLAGS) mtherr.c

clist:
	@ls.exe -1 $(OBJECTS_C:.obj=.c) $(OBJ_SQRT:.obj=.c)

save:
	-pkzip -u -ex b:qfloat *.c *.asm *.h *.txt *.doc qtstq.zip makefile

mklist:
	@echo -n $(OBJECTS_C:.obj=.c) $(OBJS_ASM:.obj=.asm) $(OBJ_SQRT:.obj=.c)
	@echo "" $(HEADERS)

