#!/bin/sh
#
# $Id: linrand,v 1.2 1999/09/28 14:56:42 ne36 Exp $
#
# Parse a Linsol Random Parameter file into environment variables

die()
{
    echo $1 1>&2
    exit 2
}

notnull()
{
    eval VAL=\$$1
    if [ "x$VAL" = "x" ]
    then
	die "ERROR: $1 not specified."
    fi
}

defaultto()
{
    eval VAL=\$$1
    if [ "x$VAL" = "x" ]
    then
	echo "WARNING: $1 not specified." 1>&2
	echo "         Using default ($2)."   1>&2
	eval $1=$2
    fi
}

isfortrantrue()
{
    VAL=`awk '{print toupper(substr($0,0,2));}' <<EOF
$1
EOF`
    case $VAL in
        .T|T)
	    return 0
	    ;;
	.F|F)
	    return 1
	    ;;
	*)
	    die "$1 is not a boolean value!"
	    ;;
    esac
}

echo " *** LINRAND --- LINRAND --- LINRAND               ***"
echo " *** starting parameter-check...                   ***"

# init filenames

PARAMETER_FILE=$1

# init default-parameters

DEFAULT_VT10=1
DEFAULT_VECTERM2=".true."
DEFAULT_VT10=2
DEFAULT_VECTERM3=".true."
DEFAULT_VT10=3
DEFAULT_VECTERM4=".false."
DEFAULT_VECTERM5=".false."
DEFAULT_VECTERM6=".false."
DEFAULT_VECTERM7=".false."
DEFAULT_VECTERM8=".false."
DEFAULT_VECTERM9=".false."
DEFAULT_VECTERM10=".false."

DEFAULT_FAC10=1
DEFAULT_UFAC=2
DEFAULT_LFAC=3

DEFAULT_VTBAND=100
DEFAULT_VTSTEP=1
DEFAULT_DSTRIDE=3
DEFAULT_LSHOW1=".false."
DEFAULT_LSHOW2=".false."
DEFAULT_LCALC=".false."

DEFAULT_LOUT=6

# Remove all comments and blank lines and massage all assignments
# into good shape for subsequent sourcing
TMPFILE="/tmp/linrand$$"
awk -F= '$0 !~ /^#|^[ \t]*$/ {print toupper($1),$2;}' \
  < $PARAMETER_FILE > $TMPFILE
while read line
do
    set -- $line
    # Process parameters into variables.
    # Note that `LINSOL_' is prepended to the names in the input file
    case $1 in
	RANDOM_LOUT|\
	RANDOM_OUTPUT_FILENAME|\
	RANDOM_DIMENSION|\
	RANDOM_VECTERM2|\
	RANDOM_VECTERM3|\
	RANDOM_VECTERM4|\
	RANDOM_VECTERM5|\
	RANDOM_VECTERM6|\
	RANDOM_VECTERM7|\
	RANDOM_VECTERM8|\
	RANDOM_VECTERM9|\
	RANDOM_VECTERM10|\
	RANDOM_VT10|\
	RANDOM_VT20|\
	RANDOM_VT30|\
	RANDOM_VT40|\
	RANDOM_VT50|\
	RANDOM_VT60|\
	RANDOM_VT70|\
	RANDOM_VT80|\
	RANDOM_VT90|\
	RANDOM_VT100|\
	RANDOM_VTBAND|\
	RANDOM_FAC10|\
	RANDOM_FAC60|\
	RANDOM_LFAC|\
	RANDOM_UFAC|\
	RANDOM_VTSTEP|\
	RANDOM_DSTRIDE)
	    eval "VAL=\$LINSOL_$1"
	    if [ "x$VAL" != "x" ]
 	    then
	        echo "WARNING: $1 is set more than once!" 1>&2
	    fi
	    eval "LINSOL_$1=$2"
	    eval "export LINSOL_$1"
	    ;;
	*)
	    echo "WARNING: Unknown parameter $1"
	    ;;
    esac
done < $TMPFILE
rm $TMPFILE

notnull LINSOL_RANDOM_DIMENSION

# check if vector-term-typ parameters are specified
# if not exit with error-message

defaultto LINSOL_RANDOM_VECTERM2 DEFAULT_VECTERM2
defaultto LINSOL_RANDOM_VECTERM3 DEFAULT_VECTERM3
defaultto LINSOL_RANDOM_VECTERM4 DEFAULT_VECTERM4
defaultto LINSOL_RANDOM_VECTERM5 DEFAULT_VECTERM5
defaultto LINSOL_RANDOM_VECTERM6 DEFAULT_VECTERM6
defaultto LINSOL_RANDOM_VECTERM7 DEFAULT_VECTERM7
defaultto LINSOL_RANDOM_VECTERM8 DEFAULT_VECTERM8
defaultto LINSOL_RANDOM_VECTERM9 DEFAULT_VECTERM9
defaultto LINSOL_RANDOM_VECTERM10 DEFAULT_VECTERM10

defaultto LINSOL_RANDOM_VT10 DEFAULT_VT10

if isfortrantrue $LINSOL_RANDOM_VECTERM2
then
    defaultto LINSOL_RANDOM_VT20 DEFAULT_VT20
fi

if isfortrantrue $LINSOL_RANDOM_VECTERM3
then
    defaultto LINSOL_RANDOM_VT30 DEFAULT_VT30
fi

if isfortrantrue $LINSOL_RANDOM_VECTERM4
then
    defaultto LINSOL_RANDOM_VT40 DEFAULT_VT40
fi

if isfortrantrue $LINSOL_RANDOM_VECTERM5
then
    defaultto LINSOL_RANDOM_VT50 DEFAULT_VT50
fi

if isfortrantrue $LINSOL_RANDOM_VECTERM6
then
    defaultto LINSOL_RANDOM_VT60 DEFAULT_VT60
fi

if isfortrantrue $LINSOL_RANDOM_VECTERM7
then
    defaultto LINSOL_RANDOM_VT70 DEFAULT_VT70
fi

if isfortrantrue $LINSOL_RANDOM_VECTERM8
then
    defaultto LINSOL_RANDOM_VT80 DEFAULT_VT80
fi

if isfortrantrue $LINSOL_RANDOM_VECTERM9
then
    defaultto LINSOL_RANDOM_VT90 DEFAULT_VT90
fi

if isfortrantrue $LINSOL_RANDOM_VECTERM10
then
    defaultto LINSOL_RANDOM_VT100 DEFAULT_VT100
fi


defaultto LINSOL_RANDOM_VTBAND $DEFAULT_VTBAND
if [ $LINSOL_RANDOM_VTBAND -gt $LINSOL_RANDOM_DIMENSION ]
then
    die "number of vector terms is specified incorrectly!"
fi

defaultto LINSOL_RANDOM_FAC10   $DEFAULT_FAC10
defaultto LINSOL_RANDOM_FAC60   $DEFAULT_FAC60
defaultto LINSOL_RANDOM_LFAC    $DEFAULT_LFAC
defaultto LINSOL_RANDOM_UFAC    $DEFAULT_UFAC
defaultto LINSOL_RANDOM_VTSTEP  $DEFAULT_VTSTEP
defaultto LINSOL_RANDOM_DSTRIDE $DEFAULT_DSTRIDE

echo " *** Parameters of $PARAMETER_FILE             "
echo "     successfully checked !!!               ***"
