#!/bin/sh
# May 8/01 Dave & Samit
# dorasters - do raster plots of a run file n frames at a time
#
# Usage:	00dorasters runfile trace# nframes_increment -XxY
#	 X and Y are number of panels to be set for a page in layout
#	generates a series of runfile-#-#.plt files for the frame ranges
#       starting at 1 up to max number of frames in a run by incrementing
#	as defined by nframes_increment number
# After running script to view panels in layout:
#	layout -p XxY.out | xhpgl
# To print XxY.out panels:
#	layout -p XxY.out | hardcopy   

makelayout() {
	# makelayout rows cols [-p], e.g. makelayout 3 3 [-p]
	# -p means keep panel size proportional to full page
	echo 80 320 10080 7520
	rgap=`expr 7200 / 20 / $1`
	cgap=`expr 10000 / 20 / $2`
	ysize=`expr \( 7200 - \( $1 - 1 \) \* $rgap \) / $1`
	xsize=`expr \( 10000 - \( $2 - 1 \) \* $cgap \) / $2`
	case "$3" in
	-p)	# maintain aspect ratio, but use smaller size so it fits
		pysize=`expr $xsize \* 72 / 100`
		if [ $pysize -gt $ysize ]
		then
			xsize=`expr $ysize \* 100 / 72`
		else
			ysize=$pysize
		fi
		;;
	esac
	x=0
	while [ $x -lt $2 ]
	do
	    y=0
	    while [ $y -lt $1 ]
	    do
		echo `expr 80 + $x \* \( $xsize + $cgap \)` \
		     `expr 7520 - $y \* \( $ysize + $rgap \) - $ysize` \
		     `expr 80 + $x \* \( $xsize + $cgap \) + $xsize` \
		     `expr 7520 - $y \* \( $ysize + $rgap \)` 0
		y=`expr $y + 1`
	    done
	    x=`expr $x + 1`
	done
}

case "$#" in
3|4)	;;
*)	echo "Usage: $0 runfile trace nframes [layoutfile]" >&2
	echo "    or $0 runfile trace nframes [-nxm[p]]" >&2
	exit 1 ;;
esac

case "$1" in
*.frm)	file="$1" ;;
*)	file="$1.frm" ;;
esac

case "$2//$3" in
[0-9]*//[0-9]*)	trace="$2" increment="$3" ;;
*)	echo "Usage: $0 runfile trace nframes [layoutfile]" >&2
	echo "    or $0 runfile trace nframes [-nxm[p]]" >&2
	echo " where trace is the number of the trace to be plotted" >&2
	echo "   and nframes is the number of frames to plot at a time" >&2
	exit 1 ;;
esac

if [ ! -r "$file" ]
then
	echo "$0: can't read $file" >&2; exit 1
fi

layfile="$4"
npanels=0
panel=1
case "$4" in
"")	;;
-[0-9]*x[0-9]*)
	layfile=`expr "$layfile" : '-\(.*\)'`
	rows=`expr "$layfile" : '\([0-9]*\)x.*'`
	cols=`expr "$layfile" : '.*x\([0-9]*\).*'`
	prop=
	case "$4" in
	-*p)	prop=-p ;;
	esac
	makelayout "$rows" "$cols" $prop > "$layfile.out"
	npanels=`wc -l < "$layfile.out"`
	npanels=`expr $npanels - 1`
	;;
*)	if [ ! -r "$layfile" ]
	then
		echo "$0: can't read $layfile" >&2; exit 1
	fi
	npanels=`wc -l < "$layfile"`
	npanels=`expr $npanels - 1`
	cp -p "$layfile" "$layfile.out"
	;;
esac

frames=`dumprun "$file" | sed -n 's/^No. of frames:[ 	]*\([0-9]*\).*/\1/p'`
if [ -z "$frames" ] || [ "$frames" -le 0 ]
then
	echo "$0: no frames in $file" >&2; exit 1
fi

pltfile=`basename "$file" .frm`
start=1
while [ "$start" -le "$frames" ]
do
	last=`expr "$start" + "$increment" - 1`
	if [ "$last" -gt "$frames" ]
	then
		last="$frames"
	fi
	rm -f "${pltfile}-${start}-${last}.plt"
	raster <<!
f${file}
${trace}
${start}-${last}
x0
hny0
ccy-2
2
dpf${pltfile}-${start}-${last}.plt
q
!
	if [ "$panel" -le "$npanels" ]
	then
		layout "$layfile.out" <<!
f${panel}
${pltfile}-${start}-${last}.plt
w
qy
!
		panel=`expr "$panel" + 1`
	fi
	start=`expr "$start" + "$increment"`
done

