#!/bin/bash
# $Header: /usr/local/scalawags_cvs/Scalawags/Frc2006/scripts/getstring,v 1.1 2005/01/30 00:24:59 abrown Exp $
# Header: getstring,v 1.7 95/03/03 10:44:40 abrown Exp
# Allen Brown date ="20040127 12:49:00"
typeset GETprogname GETinteractive
GETprogname="${0##*/}"
# To use getstring first source this file.
# . getstring
# Then you can use it.
# getstring -l y "Do you want to exit?" dummy '^[yn]$' \
# "Please answer 'y' or 'n'."
# On exit, echos new value for <envariable>.
# stderr is used for prompt strings.
# Quote characters '"' are illegal input.
# GETinteractive="${-%%i*}"
# echo "=${-}=${GETinteractive}=${GETprogname}="
# if [ -z "${GETinteractive}" ]; then
if [ "${GETfile##*/}" != "${GETprogname}" ]; then
# script is sourced
function getstring
{
GETfile="/home/abrown/public_html/first/first2004/coprocessor/scripts/getstring"
# For ksh, the following needs to be 'typeset'. For bash, it
# needs to be 'local'. Envariables don't work here.
local \
usage help done default prompt required pattern pat_err \
new_value helpforce
local \
-i error forcecaseEither forcecaseUpper forcecaseLower \
forcecase PromptLength
typeset \
-i error forcecaseEither forcecaseUpper forcecaseLower \
forcecase PromptLength
usage="Usage: ${GETfile##*/} [<options>] <default> <prompt> <required> <pattern> <pat_err>"
usage="${usage}\n\t\t[-l] # Translate to lower case"
usage="${usage}\n\t\t[-u] # Translate to upper case"
usage="${usage}\n\t\t[-h] <help> # Give help if answer == '?'."
usage="${usage}\n\t # <help> may be null string ''."
usage="${usage}\n\t\t[-p] <num> # Max chars in prompt before wrap."
usage="${usage}\n\t\t<default> # default value"
usage="${usage}\n\t\t<prompt> # How to ask for input"
usage="${usage}\n\t\t<required> # Error message if no input given"
usage="${usage}\n\t\t<pattern> # egrep pattern that must be matched"
usage="${usage}\n\t\t<pat_err> # Error message pattern not matched"
LOCOS=$(uname)
case "${LOCOS}" in
HP-UX)
echoopt=
echoterm='\c'
echoext=
;;
Linux)
echoopt='-n'
echoterm=
echoext='-e'
;;
*)
echo "Unable to identify system: ${SYSNAME}='${LOCOS}'"
exit -1
;;
esac
error=0
# enum
forcecaseEither=1
forcecaseUpper=2
forcecaseLower=3
PromptLength=30
help=
forcecase=${forcecaseEither}
done=false
if [ $# -lt 5 ]; then
error=-1
done=true
fi
while [ ${done} = false ]; do
case ${1-"-?"} in
-l)
forcecase=${forcecaseLower}; shift
;;
-u)
forcecase=${forcecaseUpper}; shift
;;
-p)
PromptLength=${2}; shift; shift
;;
-h)
help=" ${2}"; shift; shift
;;
"-?") # help
shift
error=-1
;;
-*) # huh?
echo ${echoext} "${GETprogname} ERROR\007: Unrecognized option '${1}'." 1>&2
shift
error=-1
;;
*) # start of parameters
done=true
;;
esac
done
if [ $# -ne 5 -o ${error} -ne 0 ]; then
error=-1
else
case ${forcecase} in
${forcecaseEither})
default="${1}"
;;
${forcecaseUpper})
default="$(echo "${1}" | tr '[a-z]' '[A-Z]')"
;;
${forcecaseLower})
default="$(echo "${1}" | tr '[A-Z]' '[a-z]')"
;;
esac
prompt="${2}"; # How to ask for input.
required="${3}"; # Error message if user gives no input.
pattern="${4}"; # The result must match this egrep pattern.
# "." to allow any input.
pat_err="${5}"; # Error message if input fails egrep pattern.
new_value=
while [ "x${new_value}" = "x" ]; do
if [ "x${default}" = "x" ]; then
echo ${echoopt} "${prompt}: ${echoterm}" 1>&2
read new_value
else
if [ ${PromptLength} \
-gt $(echo "${prompt} (CR='${default}'): " | wc -c) ]; then
echo ${echoopt} "${prompt} (CR='${default}'): ${echoterm}" 1>&2
read new_value
else # Default value is long.
echo "${prompt} (CR='${default}')" 1>&2
echo ${echoopt} ": ${echoterm}" 1>&2
read new_value
fi
fi
: ${new_value:=${default}}
if [ "x${new_value}" = "x" ]; then
echo " Unacceptable input. ${required}" 1>&2
else
case ${forcecase} in
${forcecaseEither})
new_value="${new_value}"
helpforce=
;;
${forcecaseUpper})
new_value="$(echo "${new_value}" | tr '[a-z]' '[A-Z]')"
helpforce=" after folding to upper case"
;;
${forcecaseLower})
new_value="$(echo "${new_value}" | tr '[A-Z]' '[a-z]')"
helpforce=" after folding to lower case"
;;
esac
if [ "x${help}" != "x" -a "x${new_value}" = "x?" ]; then
echo " Answer will be egreped against" \
"'${pattern}'${helpforce}." 1>&2
if [ "x${help}" != "x " ]; then
echo "${help}" 1>&2
fi
new_value=
else
if [ "$(echo "x${new_value}" | grep -e '\"')" != "" ]; then
echo " Unacceptable input. " \
"'\"' is an illegal character." 1>&2
new_value=
else
if [ "$(echo "${new_value}" | egrep -e "${pattern}")" = "" ]; then
echo " Unacceptable input. ${pat_err}" 1>&2
new_value=
fi
fi
fi
fi
done
echo ${new_value}
fi
if [ ${error} -ne 0 ]; then
echo ${echoext} "${usage}" 1>&2
fi
}
else
# script is not sourced.
echo ${echoext} "${GETprogname} WARNING\007: This file must be" \
"sourced to be effective." 1>&2
fi
unset GETfile GETprogname GETinteractive
syntax highlighted by Code2HTML, v. 0.9.1