-#!/bin/bash
-
-# Syntactically check the gsu_options array for errors and parse the config
-# file.
-gsu_check_options()
-{
- local i conf="${gsu_config_file:=${HOME:-}/.$gsu_name.rc}" val
-
- for ((i=0; i < ${#gsu_options[@]}; i++)); do
- eval "${gsu_options[$i]}"
- eval val='"'\${${name}:-}'"'
- eval orig_${gsu_config_var_prefix}_$name='"'${val}'"'
- done
-
- [[ -r "$conf" ]] && source "$conf"
-
- for ((i=0; i < ${#gsu_options[@]}; i++)); do
- local name= option_type= default_value= required=
- local description= help_text=
- local val orig_val
-
- eval "${gsu_options[$i]}"
-
- # Check name. It must be non-empty and consist of [a-zA-Z_0-9]
- # only. Moreover it must not start with [a-zA-Z].
- ret=-$E_GSU_BAD_CONFIG_VAR
- result="name: '$name'"
- # bash's =~ works only for 3.2 and newer, so use grep
- echo "$name" | grep '^[a-zA-Z][a-zA-Z_0123456789]*$' &> /dev/null;
- [[ $? -ne 0 ]] && return
-
- eval orig_val='"'\$orig_${gsu_config_var_prefix}_$name'"'
- if [[ -z "$orig_val" ]]; then
- eval val='"'\${$name:-}'"'
- else
- val="$orig_val"
- fi
- case "$required" in
- true|yes)
- ret=-$E_GSU_NEED_VALUE
- result="$name"
- [[ -z "$val" ]] && return
- ;;
- false|no)
- ;;
- *)
- ret=-$E_GSU_BAD_BOOL
- result="required: $required, name: $name, val: $val"
- return
- esac
-
- eval ${gsu_config_var_prefix}_$name='"'\${val:="$default_value"}'"'
- # Check option type. ATM, only num and string are supported
- # Other types may be added without breaking compatibility
- case "$option_type" in
- string)
- ;;
- num)
- gsu_is_a_number "$val"
- [[ $ret -lt 0 ]] && return
- ;;
- *)
- ret=-$E_GSU_BAD_OPTION_TYPE
- result="$name/$option_type"
- return
- esac
- done
- ret=$GSU_SUCCESS
-}
-
-# Call gsu_check_options(), die on errors.
-gsu_check_options_or_die()
-{
- gsu_check_options
- if (($ret < 0)); then
- gsu_err_msg
- exit 1
- fi
-}
-
-if [[ "$(type -t _gsu_setup)" != "function" ]]; then
- gsu_dir=${gsu_dir:=${HOME:-}/.gsu}
- . $gsu_dir/common || exit 1
- _gsu_setup
-fi