From c8f4e039d3bafb61d2d2e749160735d962e5ad6c Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Sun, 24 Oct 2010 11:28:23 +0200 Subject: [PATCH] gsu: Introduce gsu_getopts(). No users yet. --- funcs/gsu | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/funcs/gsu b/funcs/gsu index e7a49fe..abe64ce 100644 --- a/funcs/gsu +++ b/funcs/gsu @@ -15,6 +15,7 @@ E_GSU_BAD_OPTION_TYPE invalid option type E_GSU_BAD_ARG_COUNT invalid number of arguments E_GSU_EDITOR failed to execute editor E_GSU_MKDIR failed to create directory +E_GSU_GETOPTS getopts error $gsu_errors " local a b i=0 @@ -397,6 +398,68 @@ _gsu_check_options() } export -f _gsu_check_options +gsu_getopts() +{ + local i c tab=' ' cr=' +' + + gsu_check_arg_count $# 1 1 + [[ $ret -lt 0 ]] && return + + ret=-$E_GSU_GETOPTS + result="invalid optstring $1" + [[ -z "$1" || "$1" =~ "::" ]] && return + for ((i=0; i < ${#1}; i++)); do + c=${1:$i:1} + case "$c" in + [a-zA-Z:]);; + *) + result="invalid character $c in optstring" + return + esac + done + result="local opt" + for ((i=0; i < ${#1}; i++)); do + c1=${1:$i:1} + c2=${1:$(($i + 1)):1} + result+=" o_$c1" + if [[ "$c2" = ":" ]]; then + let i++ + else + result+="=false" + fi + done + result+=" + OPTIND=1 + while getopts $1 opt \"\$@\"; do + case \"\$opt\" in +" + for ((i=0; i < ${#1}; i++)); do + c1=${1:$i:1} + c2=${1:$(($i + 1)):1} + result+="$tab$tab$c1) o_$c1=" + if [[ "$c2" = ":" ]]; then + result+="\"\$OPTARG\"" + let i++ + else + result+="true" + fi + result+=";;$cr" + done + result+=" + *) + ret=-\$E_GSU_GETOPTS + result=\"invalid option given\" + return + ;; + esac + done + shift \$((\$OPTIND - 1)) +" + ret=$GSU_SUCCESS +} +export -f gsu_getopts + gsu() { local i -- 2.39.2