if [ -n "${num_min}" -a -n "${default}" ]
then
if expr "${exprpfx}${default}" : "${exprnum}" > /dev/null
then
if [ ${default} -lt ${num_min} ]
then
default=${num_min}
elif [ ${default} -gt ${num_max} ]
then
default=${num_max}
fi
fi
fi
while true
do
if [ -n "${menu}" ]
then
echo "\n${menu}" >&2
fi
while true
do
echo "\n${question:-Choice?}${split}[${num_min:+ (${num_min} - ${num_max})}${aflag:+ (alphanumeric string)}${pflag:+ (pathname)}${choice}${help:+ help} ]${default:+ (default ${default})} \07\c" >&2
if read answer
then
:
else
echo "EOF" >&2
continue
fi
if [ "'${answer}'" = "''" ]
then
if [ -z "${default}" ]
then
echo "\nThere is no default answer." >&2
continue
fi
answer="${default}"
fi
if [ "'${answer}'" = "'magic mode'" ]
then
if [ -n "${hidden}" ]
then
choice=" `echo ${choice} ${hidden}`"
hidden=
echo "\nPOOF!" >&2
else
echo "\nYour incantation has no effect." >&2
fi
continue
fi
if [ -n "${num_min}" ]
then
if expr "${exprpfx}${answer}" : "${exprnum}" > /dev/null
then
if [ ${answer} -ge ${num_min} -a ${answer} -le ${num_max} ]
then
echo ${answer}
exit 0
fi
fi
fi
if [ -n "${help}" -a "'${answer}'" = "'help'" ]
then
echo "\n${help}\n\nPress RETURN to continue \c" >&2
read x
break
fi
if [ ${aflag:-n} = y ]
then
if expr "${exprpfx}${answer}" : "${exprstr}" > /dev/null
then
echo "${answer}"
exit 0
fi
fi
if [ ${pflag:-n} = y ]
then
if expr "${exprpfx}${answer}" : "${exprpath}" > /dev/null
then
echo "${answer}"
exit 0
fi
fi
for x in ${choice}
do
if [ "'${answer}'" = "'${x}'" ]
then
echo "${answer}"
exit 0
fi
done
echo "\nInvalid response ... please enter one of:" >&2
if [ -n "${num_min}" ]
then
echo "\to A number from ${num_min} thru ${num_max}" >&2
fi
if [ ${aflag:-n} = y ]
then
echo "\to A string made up of letters, numbers, '-', '_' and '.'" >&2
fi
if [ ${pflag:-n} = y ]
then
echo "\to An absolute pathname (\"/name[/name ...]\")" >&2
fi
for x in ${choice}
do
echo "\to ${x}" >&2
done
if [ -n "${help}" ]
then
echo "\to help" >&2
fi
done
done