#!/bin/sh # toc -- run troff in three passes # Permission to use, copy, modify and/or # distribute this software for any purpose # with or without fee is hereby granted. usage() { echo "usage: $0 [cmd ... \|] [arg ...]" 1>&2 echo "(input should be given on stdin)" 1>&2 exit 1 } tmp() { x=`mktemp` || exit $? RM=$RM\ $x eval $1=\$x } end() { cat $1 exit $s } RM=rm AWK=' /^\(toc\)/ { print substr($0, 6); next } { print > "/dev/stderr" } ' [ $# -eq 0 ] && usage trap '$RM; RM=; exit 130' INT trap '$RM' EXIT for t in f g h i j; do tmp $t; done echo $0: first pass 1>&2 tee $f | { eval "$@" -rte=1 -dtf=; s=$?; } 2>&1 1>$i | awk "$AWK" >$g [ -s $g ] || end $i echo $0: second pass 1>&2 { eval "$@" -rte=1 -dtf=$g; s=$?; } <$f 2>&1 1>$j | awk "$AWK" >$h diff -q $g $h >/dev/null && end $j echo $0: third pass 1>&2 { eval "$@" -rte=0 -dtf=$h; s=$?; } <$f | grep -v '^(toc)' exit $s