#!/bin/sh
#
# --- T2-COPYRIGHT-NOTE-BEGIN ---
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
# 
# T2 SDE: package/.../cpuburn/cpuburn.sh
# Copyright (C) 2004 - 2006 The T2 SDE Project
# Copyright (C) 1998 - 2003 Clifford Wolf
# 
# More information can be found in the files COPYING and README.
# 
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License. A copy of the
# GNU General Public License can be found in the file COPYING.
# --- T2-COPYRIGHT-NOTE-END ---

errors=`mktemp -t cpuburn.XXXX`
start=`date "+%s"` ; command="" ; jobs=1

help() {
	cat << 'EOT'

Usage: $0 [ -j Jobs ] { -k6 | -k7 | -p5 | -p6 | -bx | -mmx } [ -mem Mem ]

The -mem option is only available for the bx and mmx tests. Possible values
for Mem are: 2kb, 4kb, 8kb, 16kb, 32kb, 64kb, 128kb, 256kb, 512kb, 1MB, 2MB,
4MB, 8MB, 16MB, 32MB and 64MB.

EOT
	rm $errors
	exit 1
}

while [ "$#" != 0 ]
do
	case "$1" in
	    -j)
		jobs=$2 ; shift ;;

	    -bx)
		command="burnBX" ;;
	    -k6)
		command="burnK6" ;;
	    -k7)
		command="burnK7" ;;
	    -mmx)
		command="burnMMX" ;;
	    -p5)
		command="burnP5" ;;
	    -p6)
		command="burnP6" ;;

	    -mem)
		[ "$command" != burnBX -a "$command" != burnMMX ] && help

		case "$2" in
		    2kb)
			command="$command A" ;;
		    4kb)
			command="$command B" ;;
		    8kb)
			command="$command C" ;;
		    16kb)
			command="$command D" ;;
		    32kb)
			command="$command E" ;;
		    64kb)
			command="$command F" ;;
		    128kb)
			command="$command G" ;;
		    256kb)
			command="$command H" ;;
		    512kb)
			command="$command I" ;;
		    1MB)
			command="$command J" ;;
		    2MB)
			command="$command K" ;;
		    4MB)
			command="$command L" ;;
		    8MB)
			command="$command M" ;;
		    16MB)
			command="$command N" ;;
		    32MB)
			command="$command O" ;;
		    64MB)
			command="$command P" ;;
		    *)
			help ;;
		esac
		shift
		;;

	    *)
		help ;;
	esac
	shift
done

[ "$command" = "" ] && help
desc="${jobs}x ${command#burn}"

while [ $jobs -gt 0 ] ; do
	(
		PATH=".:$PATH"
		while true ; do
			eval "$command"
			date "+%T - $?" >> $errors
		done
	) &
	jobs=$(( $jobs - 1 ))
done &> /dev/null

trap "fuser -9 -k $errors > /dev/null ; rm $errors ; exit 0" INT TERM
echo "Using temp file $errors ..."

while true
do
	tm=$(( `date +%s` - $start ))
	tm=$( printf '%02d:%02d:%02d:%02d'	\
		$(( ($tm / (60*60*24)) ))	\
		$(( ($tm / (60*60)) % 24 ))	\
		$(( ($tm / 60) % 60 ))		\
		$((  $tm % 60 )) )
	echo `date "+%T ($tm)"` " [$desc] " Load average: \
	     `uptime | sed "s,.*average: ,,"`, "" `wc -l < $errors` Errors.
	sleep 5
done