# This is the makefile that I used to create the objects and tpu's
# on my machine. The location (or even existence) of compilers may
# be different in your configuration. Modify what is needed.
#
# Typing	make		will create all .obj and .tpu files
# Typing	make demo	will run all of them and compare the
#				output with a standard. The result
#				is saved in a file called DIF.
#
TPC  = tpc
ASM  = tasm -n
C    = tcc

FORT = f77l
LINK = link77

FOR2 = \fortran\qfort
LNK2 = \fortran\qfortlnk

# This is the list of all the objects that are to be created by the
# makefile. Remove from here any objects which you don't want, or
# whose compiler you don't have.

all: ultra_ct.obj ultra_cs.obj ultra_cc.obj ultra.tpu    \
     ultra_cm.obj ultra_cl.obj ultra_ch.obj ultra_lh.obj \
     ult32_ct.obj ult32_cs.obj ult32_cc.obj ultra32.tpu  \
     ult32_cm.obj ult32_cl.obj ult32_ch.obj ult32_lh.obj \
     ultra_fr.obj

# This is the list of commands to make the various objects

ultra_ct.obj: ultra_c.asm ultracod.inc ultradat.inc
  $(ASM) -dm=tiny      -mx ultra_c.asm,ultra_ct.obj
ultra_cs.obj: ultra_c.asm ultracod.inc ultradat.inc
  $(ASM) -dm=small     -mx ultra_c.asm,ultra_cs.obj
ultra_cc.obj: ultra_c.asm ultracod.inc ultradat.inc
  $(ASM) -dm=compact   -mx ultra_c.asm,ultra_cc.obj
ultra_cm.obj: ultra_c.asm ultracod.inc ultradat.inc
  $(ASM) -dm=medium    -mx ultra_c.asm,ultra_cm.obj
ultra_cl.obj: ultra_c.asm ultracod.inc ultradat.inc
  $(ASM) -dm=large     -mx ultra_c.asm,ultra_cl.obj
ultra_ch.obj: ultra_c.asm ultracod.inc ultradat.inc
  $(ASM) -dm=huge      -mx ultra_c.asm,ultra_ch.obj

ult32_ct.obj: ult32_c.asm ult32cod.inc ultradat.inc
  $(ASM) -dm=tiny      -mx ult32_c.asm,ult32_ct.obj
ult32_cs.obj: ult32_c.asm ult32cod.inc ultradat.inc
  $(ASM) -dm=small     -mx ult32_c.asm,ult32_cs.obj
ult32_cc.obj: ult32_c.asm ult32cod.inc ultradat.inc
  $(ASM) -dm=compact   -mx ult32_c.asm,ult32_cc.obj
ult32_cm.obj: ult32_c.asm ult32cod.inc ultradat.inc
  $(ASM) -dm=medium    -mx ult32_c.asm,ult32_cm.obj
ult32_cl.obj: ult32_c.asm ult32cod.inc ultradat.inc
  $(ASM) -dm=large     -mx ult32_c.asm,ult32_cl.obj
ult32_ch.obj: ult32_c.asm ult32cod.inc ultradat.inc
  $(ASM) -dm=huge      -mx ult32_c.asm,ult32_ch.obj

ultra.tpu: ultratpu.pas ultra_tp.asm ultracod.inc ultradat.inc
  $(ASM) ultra_tp.asm
  $(TPC) ultratpu.pas
  if exist ultra.tpu delete ultra.tpu
  copy ultratpu.tpu ultra.tpu
  del ultratpu.tpu
ultra32.tpu: ultratpu.pas ult32_tp.asm ult32cod.inc ultradat.inc
  $(ASM) ult32_tp.asm
  $(TPC) -Di32 ultratpu.pas
  copy ultratpu.tpu ultra32.tpu
  del ultratpu.tpu

ultra_lh.obj: ultra_lh.asm ultracod.inc ultradat.inc
  $(ASM) ultra_lh.asm
ult32_lh.obj: ult32_lh.asm ult32cod.inc ultradat.inc
  $(ASM) ult32_lh.asm

ultra_fr.obj: ultra_fr.asm ultracod.inc ultradat.inc
  $(ASM) ultra_fr.asm
#ult32_fr.obj: ult32_fr.asm ult32cod.inc ultradat.inc
#  $(ASM) ult32_fr.asm

# The following is a test sequence to run the demo program and
# compare its output with the standard output. The last few digits
# might vary in floating point due to roundoff.

demo: demo.out   \
      dem_ct.out dem_ct32.out    dem_cs.out dem_cs32.out  \
      dem_cc.out dem_cc32.out    dem_cm.out dem_cm32.out  \
      dem_cl.out dem_cl32.out    dem_ch.out dem_ch32.out  \
      dem_tp.out dem_tp32.out    dem_lh.out dem_lh32.out  \
      dem_fr.out

  fc dem_ct.out demo.out	 >dif
  fc dem_cs.out demo.out	>>dif
  fc dem_cc.out demo.out	>>dif
  fc dem_cm.out demo.out	>>dif
  fc dem_cl.out demo.out	>>dif
  fc dem_ch.out demo.out	>>dif
  fc dem_ct32.out demo.out	>>dif
  fc dem_cs32.out demo.out	>>dif
  fc dem_cc32.out demo.out	>>dif
  fc dem_cm32.out demo.out	>>dif
  fc dem_cl32.out demo.out	>>dif
  fc dem_ch32.out demo.out	>>dif

  fc dem_tp.out   demo.out	>>dif
  fc dem_tp32.out demo.out	>>dif

  fc dem_lh.out   demo.out	>>dif
  fc dem_lh32.out demo.out	>>dif

  fc dem_fr.out   demo.out	>>dif
  type dif

demo.out: demo.c ultra.c
  $(C) -ms demo.c ultra.c
  demo >demo.out

dem_ct.out: demo.c ultra_ct.obj
  $(C) -mt demo.c ultra_ct.obj
  demo >dem_ct.out
dem_cs.out: demo.c ultra_cs.obj
  $(C) -ms demo.c ultra_cs.obj
  demo >dem_cs.out
dem_cc.out: demo.c ultra_cc.obj
  $(C) -mc demo.c ultra_cc.obj
  demo >dem_cc.out
dem_cm.out: demo.c ultra_cm.obj
  $(C) -mm demo.c ultra_cm.obj
  demo >dem_cm.out
dem_cl.out: demo.c ultra_cl.obj
  $(C) -ml demo.c ultra_cl.obj
  demo >dem_cl.out
dem_ch.out: demo.c ultra_ch.obj
  $(C) -mh demo.c ultra_ch.obj
  demo >dem_ch.out

dem_ct32.out: demo.c ult32_ct.obj
  $(C) -mt demo.c ult32_ct.obj
  demo >dem_ct32.out
dem_cs32.out: demo.c ult32_cs.obj
  $(C) -ms demo.c ult32_cs.obj
  demo >dem_cs32.out
dem_cc32.out: demo.c ult32_cc.obj
  $(C) -mc demo.c ult32_cc.obj
  demo >dem_cc32.out
dem_cm32.out: demo.c ult32_cm.obj
  $(C) -mm demo.c ult32_cm.obj
  demo >dem_cm32.out
dem_cl32.out: demo.c ult32_cl.obj
  $(C) -ml demo.c ult32_cl.obj
  demo >dem_cl32.out
dem_ch32.out: demo.c ult32_ch.obj
  $(C) -mh demo.c ult32_ch.obj
  demo >dem_ch32.out

dem_tp.out: demo.pas ultra.tpu
  $(TPC) demo.pas
  demo >dem_tp.out
dem_tp32.out: demo.pas ultra32.tpu
  $(TPC) -Di32 demo.pas
  demo >dem_tp32.out

dem_lh.out: demo.for ultra_lh.obj
  $(FORT) demo
  $(LINK) demo+ultra_lh.obj
  demo >dem_lh.out
dem_lh32.out: demo.for ult32_lh.obj
  $(FORT) demo
  $(LINK) demo+ult32_lh.obj;
  demo >dem_lh32.out

dem_fr.out: demo.for ultra_fr.obj
  $(FOR2) demo
  $(LNK2) demo+ultra_fr.obj
  demo >dem_fr.out

#dem32_fr.out: demo.for ult32_fr.obj
#  $(FOR2) demo
#  $(LNK2) demo+ult32_fr.obj
#  demo >dem32_fr.out
