# (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands.
# $Id$
#
# Don't generate line updating code by default (i.e.: -L flag provided to cem).
# To put it on again: use -NL
var LFLAG=-L
var C_INCLUDES=-I{EM}/include/_tail_cc
var ANSI_C_INCLUDES=-I{EM}/include/tail_ac

callname ack
name cpp
	# no from, this is a preprocessor
	to .i
	program {EM}/lib.bin/cpp{ANSI_C?}
	mapflag -I* CPP_F={CPP_F?} -I*
	mapflag -U* CPP_F={CPP_F?} -U*
	mapflag -D* CPP_F={CPP_F?} -D*
	mapflag -P CPP_F={CPP_F?} -P
	mapflag -C CPP_F={CPP_F?} -C
	mapflag -wo CPP_F={CPP_F?} -o
	mapflag -ansi ANSI_C=.ansi
	args {CPP_F?} ({SUFFIX?}:.ocm=-I{EM}/include/occam) \
		-D__{NAME} \
		-D__ACK \
		{SYSINCLUDES?} \
		({ANSI_C?}:.ansi={ANSI_C_INCLUDES}) \
		{C_INCLUDES} \
		{INCLUDES?} \
		({ANSI_C?.xx}:.xx=-D{NAME} \
		-DEM_WSIZE={w} -DEM_PSIZE={p} \
		-DEM_SSIZE={s} -DEM_LSIZE={l} -DEM_FSIZE={f} -DEM_DSIZE={d}) \
		-D_EM_WSIZE={w} -D_EM_PSIZE={p} \
		-D_EM_SSIZE={s} -D_EM_LSIZE={l} -D_EM_FSIZE={f} -D_EM_DSIZE={d} \
		<
	stdout
	prep is
end
name f77
	from .f
	to .c
	program {EM}/lib.bin/f2c
	mapflag -ansi F2_F={F2_F?} -A
	mapflag -w* F2_F={F2_F?} -w*
	args \
		{F2_F?}
	stdin
	stdout
	prep cond
	rts .f
	need .f
	callname f77
	callname f2c
end
name cem
	from .c
	to .k
	program {EM}/lib.bin/em_cemcom{ANSI_C?}
	mapflag -ansi ANSI=ansi
#	mapflag -I* CPP_F={CPP_F?} -I*
#	mapflag -U* CPP_F={CPP_F?} -U*
#	mapflag -D* CPP_F={CPP_F?} -D*
	mapflag -M* CEM_F={CEM_F?} -M*
	mapflag -L CEM_F={CEM_F?} -L
	mapflag -A CEM_F={CEM_F?} -A
	mapflag -NL LFLAG=
	mapflag -KR CEM_F={CEM_F?} -R
	mapflag -w CEM_F={CEM_F?} -w
	mapflag -wa CEM_F={CEM_F?} -a
	mapflag -wo CEM_F={CEM_F?} -o
	mapflag -ws CEM_F={CEM_F?} -s
	mapflag -g* CEM_F={CEM_F?} -g
	mapflag -p CEM_F={CEM_F?} -p
	mapflag -V* CEM_F={CEM_F?} -V*
	rts .c
	need .c
	args \
		{CPP_F?} \
		-D__{NAME} \
		-D__ACK \
		{SYSINCLUDES?} \
		({ANSI_C?}:.ansi={ANSI_C_INCLUDES}) \
		{C_INCLUDES} \
		{INCLUDES?} \
		({ANSI_C?.xx}:.xx=-D{NAME} \
		-DEM_WSIZE={w} -DEM_PSIZE={p} \
		-DEM_SSIZE={s} -DEM_LSIZE={l} -DEM_FSIZE={f} -DEM_DSIZE={d}) \
		-D_EM_WSIZE={w} -D_EM_PSIZE={p} \
		-D_EM_SSIZE={s} -D_EM_LSIZE={l} -D_EM_FSIZE={f} -D_EM_DSIZE={d} \
		-Vw{w}.{w}i{w}.{w}p{p}.{w}f{f}.{w}s{s}.{s}l{l}.{w}d{d}.{w} \
		{CC_ALIGN?} \
		{CEM_F?} {LFLAG?} < >
	callname acc
	callname cc
end
name pc
	from .p
	to .k
	program {EM}/lib.bin/em_pc
	mapflag -L PC_F={PC_F?} -L
#	mapflag -s PC_F={PC_F?} -s
	mapflag -_ PC_F={PC_F?} -U
	mapflag -w PC_F={PC_F?} -w
	mapflag -V* PC_F={PC_F?} -V*
	mapflag -M* PC_F={PC_F?} -M*
	mapflag -g* PC_F={PC_F?} -g
#	mapflag -i* PC_F={PC_F?} -i*
	mapflag -A  PC_F={PC_F?} -A
#	mapflag -R  PC_F={PC_F?} -R
	mapflag --* PC_F={PC_F?} -*
#range checks can only be disabled through comments
	args \
		-Vw{w}.{w}i{w}.{w}l{l}.{w}p{p}.{w}f{d}.{w}S{w}.{w} \
		{PC_F?} < > {SOURCE}
	prep cond
	rts .p
	need .p
	callname apc
	callname pc
end
name m2
	from .mod.def
	to .k
	program {EM}/lib.bin/em_m2
	mapflag -I* M2_INCL={M2_INCL?} -I*
	mapflag -L M2_F={M2_F?} -L
	mapflag -g* M2_F={M2_F?} -g*
	mapflag -w* M2_F={M2_F?} -w*
	mapflag -W* M2_F={M2_F?} -W*
	mapflag -_ M2_F={M2_F?} -U
	mapflag -M* M2_F={M2_F?} -M*
	mapflag -x M2_F={M2_F?} -x
	mapflag -Xs M2_F={M2_F?} -s
	mapflag -V* M2_F={M2_F?} -V*
	mapflag --* M2_F={M2_F?} -*
	args \
		{M2_INCL?} -I{EM}/lib/m2 {M2SYSLIB?} \
		-Vw{w}.{w}i{w}.{w}p{p}.{w}l{l}.{w}f{f}.{w}d{d}.{w} \
		{M2_ALIGN?} {M2_F?} < >
	prep cond
	rts .mod
	need .mod
	callname m2
end
name ocm
	from .ocm
	to .k
	program {EM}/lib.bin/em_occam
	mapflag -L OCM_F={OCM_F?} -L
	mapflag -V* OCM_F={OCM_F?} -V*
	args -Vw{w}p{p}l{l} {OCM_F?}
	stdin
	stdout
	rts .ocm
	need .ocm
	prep cond
	callname ocm
end
name abc
	from .b
	to .k
	program {EM}/lib.bin/em_bem
	mapflag -h ABC_F={ABC_F?} -h
	mapflag -w ABC_F={ABC_F?} -w
	mapflag -L ABC_F={ABC_F?} -L
	mapflag -E ABC_F={ABC_F?} -E
#	mapflag -d ABC_F={ABC_F?} -d
	args -Vw{w}p{p}f{d} {ABC_F?} < > {SOURCE}
	prep cond
	rts .b
	need .b
	callname abc
end
var A68INIT={EM}/lib.bin/em_a68s_init
name a68s
        from .8.a68
        to .k
        program {EM}/lib.bin/em_a68s{w}{p}
        mapflag -PA* A68INIT=*
        args < > {SOURCE}.lst {A68INIT}{w}{p} /dev/null
        prep cond
        rts .8
        need .8
        callname a68s
end
name encode
	from .e
	to .k
	program {EM}/lib.bin/em_encode
	args <
	prep cond
	stdout
end
name opt
	from .k
	to .m
	program {EM}/lib.bin/em_opt
	mapflag -LIB OPT_F={OPT_F?} -L
# when running the global optimizer, no multiplication optimization here.
	mapflag -O2 OPT2_F=-m0
	mapflag -O3 OPT2_F=-m0
	mapflag -O4 OPT2_F=-m0
	args {OPT_F?} {MACHOPT_F?} {OPT2_F?} <
	stdout
	optimizer
end
name ego
	from .m.ma
	to .gk
	program {EM}/lib.bin/em_ego
	mapflag -EGO-* EGO_F={EGO_F?} -*
# The following lines are obsolete, but here for backwards compatibility.
# They should be removed some day.
	mapflag -IL* EGO_F={EGO_F?} -IL*
	mapflag -CS* EGO_F={EGO_F?} -CS*
	mapflag -SR* EGO_F={EGO_F?} -SR*
	mapflag -UD* EGO_F={EGO_F?} -UD*
	mapflag -LV* EGO_F={EGO_F?} -LV*
	mapflag -SA* EGO_F={EGO_F?} -RA*
	mapflag -SP* EGO_F={EGO_F?} -SP*
	mapflag -BO* EGO_F={EGO_F?} -BO*
	mapflag -CJ* EGO_F={EGO_F?} -CJ*
	mapflag -EV EGO_F={EGO_F?} -V
# End of obsolete lines
	mapflag -Q* EGO_F={EGO_F?} -Q*
	mapflag -T* EGO_F={EGO_F?} -T*
	mapflag -S* EGO_F={EGO_F?} -S*
	mapflag -s* EGO_F={EGO_F?} -s*
	mapflag -a EGO_F={EGO_F?} -a
	mapflag -O* EGO_F={EGO_F?} -O*
	args \
		{EGO_F?} -P {EM}/lib.bin/ego \
		-M{EM}/lib.bin/ego/{M}descr <
	optimizer 2
	stdout
	combiner
end
name opt2
	# output of the global optimizer is processed by a stripped version
	# of the em peephole optimizer
	from .gk
	to .g
	program {EM}/lib.bin/em_opt2
#	mapflag -LIB OPT_F={OPT_F?} -L
	args {OPT_F?} {MACHOPT_F?} <
	optimizer
	stdout
end
name decode
	from .k.m.g.gk
	to .e
	program {EM}/lib.bin/em_decode
	args <
	stdout
end