+_gsu_init_config()
+{
+ local name val default_val required ty comment
+
+ # set default values
+ while read name default_val required ty comment; do
+ if test -z "$name"; then
+ continue
+ fi
+ eval ${gsu_self}_$name="$default_val"
+ done << EOF
+ $gsu_config_vars
+EOF
+ result="$HOME/.${gsu_self}rc"
+ # overwrite by custom configuration
+ if [ -r "$result" ]; then
+ ret=-$E_GSU_SOURCE
+ if ! . "$result"; then
+ gsu_err_msg
+ exit 1
+ fi
+ fi
+ while read name default_val required ty comment; do
+ [ -z "$name" ] && continue
+ eval val="\$$name"
+ # abort if any required config var remains unset
+ ret=-$_E_GSU_CONFIG
+ if [ "$val" = "-" -a "$required" = "required" ]; then
+ result="$name"
+ gsu_err_msg
+ exit 1
+ fi
+ if [ $ty == "number" ]; then
+ gsu_is_a_number "$val"
+ if [ $ret -lt 0]; then
+ gsu_err_msg
+ exit 1
+ fi
+ fi
+ eval export ${gsu_self}_$name
+ done << EOF
+ $config_vars
+EOF
+}
+export -f _gsu_init_config
+