#!/bin/sh
#
####################################################
#     This software released to the public domain  #
#     without restrictions of any kind.            #
####################################################
#
#	@(#)ibench	3.1 9/22/89

def_baud="9600 exta extb"
def_flow="ixoff"
def_mode="-icanon"

tty=
baud=
mode=
len=
min=0

while [ "$1" ]
do
	case "$1" in

	50|75|110|1200|2400|4800|9600|19200|38400|exta|extb)
		def_baud=
		baud="$baud $1"
		;;

	[1-9]|1[0-6])
		min=$1
		;;

	19200,exta|38400,extb|exta,19200|extb,38400)
		def_baud=
		baud="$baud $1"
		;;
	
	ixoff|-ixoff)
		def_flow=
		flow="$flow $1"
		;;

	icanon|-icanon)
		def_mode=
		mode="$mode $1"
		;;
	
	/dev/*)
		tty="$tty $1"
		;;

	tty*|cu*)
		tty="$tty /dev/$1"
		;;
	
	*)
		tty="$tty /dev/tty$1"
		;;
	esac

	shift
done

baud="$def_baud $baud"
mode="$def_mode $mode"
flow="$def_flow $flow"

ctty=`expr "$tty" : ' *\([^ ]*\)'`

lastb=0
for b in $baud
do
	b1=`expr "$b" : '\(.*\),.*' \| "$b"` ;
	b2=`expr "$b" : '.*,\(.*\)' \| "$b"` ;

	if [ $lastb != 0 -a $b1 != $lastb ]
	then
		for i in $tty
		do
			(
			stty $lastb -echo -icanon -opost
			perf -c "stty $b2"
			sleep 5
			) <$i >$i &
		done
		wait
	fi
	lastb=$b1

	case $b1 in
	50) vol=574000 ;;
	75) vol=768000 ;;
	110) vol=1152000 ;;
	1200) vol=12000 ;;
	2400) vol=24000 ;;
	4800) vol=48000 ;;
	9600) vol=96000 ;;
	exta|19200) vol=192000 ;;
	extb|38400) vol=384000 ;;
	esac


	for f in $flow
	do
		for m in $mode
		do
			t=
			n=0

			for i in $tty
			do
				t="$t $i"
				n=`expr $n + 1`

				[ $n -ge $min ] || continue

				msg="tty=$n, baud=$b1, mode=$m, flow=$f"
				echo "SEND $msg"

				(
				stty $b1 -echo -opost -icanon
				perf -e "TEST $msg"
				perf -c "(sleep 30 ; cpu -t 50)&"
				) <$ctty >$ctty

				for j in $t
				do
					(
					stty $b1 -opost -echo -icanon ixon
					perf -c "stty $m $f"
					sleep 5
					perf $vol
					) <$j >$j &
				done

				wait
				sleep 10
			done
		done
	done
done 2>&1
