#!/bin/csh -f
#
# update - make sure all .data and .avg files are up to date
#
set usage='usage: update [configdir] ...'
#
# Part of
#              The STARFISH Parallel file-system simulator
#        (Simulation Tool for Advanced Research in File Systems)
# 
#                               David Kotz
#                           Dartmouth College
#                              Version 3.0
#                              October 1996
#                          dfk@cs.dartmouth.edu

source environset

if ($#argv == 0) then
	set dirs=(configs/*)
else
	set dirs=($*)
endif

onintr cleanup

foreach dir ($dirs)
    if (! -d $dir/results) continue

    set makefile=$dir/results/Makefile
    echo > $makefile

    set datalist=$dir/results/datalist
    echo -n all:  > $datalist

    # try to make a list of *sim* in $dir/results
    set files=(`ls $dir/results | grep 'sim'`)
    if ($#files == 0) continue

    foreach f ($files)
	set file=$dir/results/$f
	# set "data" to be data file name
	if ($file:e == gz || $file:e == Z || $file:e == z) then
		set temp = $file:r
		set data = $temp:r.data
	else
		set data = $file:r.data
	endif

	echo "$data : $file" >> $makefile
	echo "	extract-one $file $data" >> $makefile
	echo "" >> $makefile

    	echo -n " "$data >> $datalist
    end	
    echo "" >> $datalist
    cat $datalist >> $makefile

    echo data for $dir
    make -k -f $makefile all
    echo ""
    rm -f $makefile $datalist

    echo > $makefile
    set avgfiles=()
    foreach file ($dir/results/*.1.sim*)
	# set "base" to be base file name
	if ($file:e == gz || $file:e == Z || $file:e == z) then
		set temp = $file:r	# strip .gz
		set temp = $temp:r	# strip .sim
		set base = $temp:r	# strip .1
	else
		set temp = $file:r	# strip .sim
		set base = $temp:r	# strip .1
	endif

	set nonomatch
	set data=($base.*.data)
	if ("$data" != "$base.*.data") then
		set avg=$base.avg
		echo "$avg : $data" >> $makefile
		echo "	average-one $avg $data" >> $makefile
		echo "" >> $makefile

		set avgfiles=($avgfiles $avg)
	else
		echo No data files for $base
	endif
	unset nonomatch
    end
    echo all: $avgfiles >> $makefile

    echo average for $dir
    make -k -f $makefile all
    echo ""
    rm -f $makefile

improve:

    if ($dir =~ *cache*) continue

# continue # skip the imp stuff for now

    echo > $makefile
    set impfiles=()
    foreach file ($dir/results/*.1.sim*)
	# set "base" to be base file name
	if ($file:e == gz || $file:e == Z || $file:e == z) then
		set temp = $file:r	# strip .gz
		set temp = $temp:r	# strip .sim
		set base = $temp:r	# strip .1
	else
		set temp = $file:r	# strip .sim
		set base = $temp:r	# strip .1
	endif
	set avg=$base.avg
	set imp=$base.imp
	echo "$imp : $avg" >> $makefile
	echo "	improve $avg" >> $makefile
	echo "" >> $makefile

	set impfiles=($impfiles $imp)
    end
    echo all: $impfiles >> $makefile

    echo improve for $dir
    make -k -f $makefile all
    echo ""
    rm -f $makefile
end

cleanup:
if ($?makefile) rm -f $makefile
if ($?datalist) rm -f $datalist
