.\" trace.tmac
.\"
.\" Load this before a macro package that you want to trace.
.
.nr _C \n(.C
.cp 0
.
.do ds !!sp " \"
.
.eo
.
.rn de !!de
.rn de1 !!de1
.
.
.!!de de
. do ecs
. ec
. do !!de \$1
. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** de trace enter: \\$0 \\$@
. el .do tm1 "\\*[!!sp]*** de trace enter \$1: \\$0 \\$@
. do as !!sp " \"
. do nop \\*[!!\$1]\\
. do substring !!sp 1
. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** trace exit: \\$0 \\$@
. el .do tm1 "\\*[!!sp]*** trace exit \$1: \\$0 \\$@
\..
.
. do ds !!d1 !!\$1
. do ds !!d2 \$2
.
. do ecr
. do dei !!d1 !!d2
..
.
.!!de de1
. do ecs
. ec
. do !!de \$1
. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** de1 trace enter: \\$0 \\$@
. el .do tm1 "\\*[!!sp]*** de1 trace enter \$1: \\$0 \\$@
. do as !!sp " \"
. do nop \\*[!!\$1]\\
. do substring !!sp 1
. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** trace exit: \\$0 \\$@
. el .do tm1 "\\*[!!sp]*** trace exit \$1: \\$0 \\$@
\..
.
. do ds !!d1 !!\$1
. do ds !!d2 \$2
.
. do ecr
. do dei1 !!d1 !!d2
..
.
.rn am !!am
.rn am1 !!am1
.
.!!de am
. do ecs
. ec
. do !!de \$1
. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** am trace enter: \\$0 \\$@
. el .do tm1 "\\*[!!sp]*** am trace enter \$1: \\$0 \\$@
. do as !!sp " \"
. do nop \\*[!!\$1]\\
. do substring !!sp 1
. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** trace exit: \\$0 \\$@
. el .do tm1 "\\*[!!sp]*** trace exit \$1: \\$0 \\$@
\..
.
. do ds !!a1 !!\$1
. do ds !!a2 \$2
.
. do ecr
. do ami !!a1 !!a2
..
.
.!!de am1
. do ecs
. ec
. do !!de \$1
. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** am1 trace enter: \\$0 \\$@
. el .do tm1 "\\*[!!sp]*** am1 trace enter \$1: \\$0 \\$@
. do as !!sp " \"
. do nop \\*[!!\$1]\\
. do substring !!sp 1
. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** trace exit: \\$0 \\$@
. el .do tm1 "\\*[!!sp]*** trace exit \$1: \\$0 \\$@
\..
.
. do ds !!a1 !!\$1
. do ds !!a2 \$2
.
. do ecr
. do ami1 !!a1 !!a2
..
.
.rn return !!return
.
.!!de1 return
. substring !!sp 1
. tm1 "\*[!!sp]*** return
. !!return twice
..
.
.ec
.
.cp \n(_C
.
.\" EOF