#!/bin/sh
#
# common-config - Common setup and functions for all configuration-handling
#		  scripts
#
# Written 2005 by Werner Almesberger
#

ANSWERS=config/answers
REAL_STDIN=/proc/$$/fd/0

[ -r $ANSWERS ] && . $ANSWERS

if [ ! -e VERSIONS ]; then
    echo "please run $0 from the kboot top-level directory" 1>&2
    exit 1
fi

. scripts/common-all


###############################################################################
#
# Configuration questions and answers
#

#
# add_answer variable=value
#

add_answer()
{
    if [ ! -e $ANSWERS ]; then
	echo "# MACHINE-GENERATED - TRY NOT TO EDIT !" >$ANSWERS
	echo >>$ANSWERS
    fi
    echo "$1" >>$ANSWERS
}


#
# yesno yes/no-question [default]
#
# We intentionally "leak" $answer.
#

yesno()
{
    local yn

    answer=
    while [ -z "$answer" ]; do
	echo -n "$1 " 1>&2
	case "$2" in
	    y)	default=y
		echo -n "[Y/n] " 1>&2;;
	    n)	default=n
		echo -n "[y/N] " 1>&2;;
	    "")	default=
		echo -n "[y/n] " 1>&2;;
	esac
	read yn <$REAL_STDIN
	case "${yn:-$default}" in
	    [yY])
		answer=true;;
	    [nN])
		answer=false;;
	    *)	echo "Y or N, please." 1>&2;;
	esac
    done
    $answer
}


#
# question variable yes/no-question [default]
#

question()
{
    local answer

    answer="`__var_get $1`"
    if [ -z "$answer" ]; then
	yesno "$2" $3
	__var_set $1 $answer
	add_answer $1=$answer
    fi
    $answer
}


#
# ask variable question [default]
#

ask()
{
    local answer

    answer="`__var_get $1`"
    if [ -z "$answer" ]; then
	echo -n "$2 " 1>&2
	if [ ! -z "$3" ]; then
	    echo -n "[$3] " 1>&2
	fi
	read answer <$REAL_STDIN
	if [ -z "$answer" -a ! -z "$3" ]; then
	    answer="$3"
	fi
	__var_set $1 "$answer"
	add_answer $1='"'"$answer"'"'
    fi
    echo "$answer"
}


#
# answer variable value
#

answer()
{
    if [ -z "`__var_get $1`" ]; then
	add_answer $1=$2
    fi
}
