X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=misc%2Fgsu%2Fconfig;fp=misc%2Fgsu%2Fconfig;h=df96af2d5e7019c70865e9f371f6511282b4d193;hb=d84fb61667757b1e62b915781357e10693ce8a9e;hp=0000000000000000000000000000000000000000;hpb=279c1ab1336b67b144d39f1d0bbd256cd4510b20;p=gsu.git diff --git a/misc/gsu/config b/misc/gsu/config new file mode 100644 index 0000000..df96af2 --- /dev/null +++ b/misc/gsu/config @@ -0,0 +1,88 @@ +#!/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 +} +export -f gsu_check_options + +# 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