3 if [[ $(type -t gsu_is_a_number) != "function" ]]; then
4 GSU_DIR=${GSU_DIR:=$HOME/.gsu}
5 . $GSU_DIR/common || exit 1
8 export GSU_NODE_NAME_PATTERN='[a-zA-Z_]'
15 gsu_msg "fatal: could not get terminal geometry"
27 dialog --infobox "$1" $result
30 gsu_checklist_all_on()
34 local i state opts num=0
42 result=$(dialog --checklist "$header" $opts 3>&1 1>&2 2>&3 3>&-)
49 local selected_item="$2"
51 local i state ops num=0
57 if [[ "$i" == "$selected_item" ]]; then
62 ops+=" $i $num $state"
64 result=$(dialog --radiolist "$header" $ops 3>&1 1>&2 2>&3 3>&-)
70 local g text="$1" init="$2"
74 result="$(dialog --inputbox "$text" $g "$init" 3>&1 1>&2 2>&3 3>&-)"
83 dialog --textbox "$file" $result
86 # dialog segfaults if message is too long. Hence we always use a temporary file
89 local tmp="$(mktemp gsu_msgbox.XXXXXXXXXX)"
92 dialog --msgbox "mktemp error" 0 0
102 local tmp="$(mktemp)"
105 dialog --msgbox "mktemp error" 0 0
109 echo "exit code: $?" >> "$tmp"
119 dialog --yesno "$text" $result
121 if (($ret == 0)); then
123 elif (($ret == 1)); then
132 local header="${1:-root}"
134 local i state opts num=0
142 result="$(dialog --menu "$header" $opts 3>&1 1>&2 2>&3 3>&-)"
148 local tmp="${1%%$GSU_NODE_NAME_PATTERN*}"
154 local tree="$1" root="${2%/}"
157 first="$(grep -n "$root/" <<< "$tree")"
158 [[ -z "$first" ]] && return
160 line_num="${first%%:*}"
161 _get_level "${first#*:}"
164 #echo "line: $line_num, root: $root, indent level: $level"
165 result="$(sed -e "1,${line_num}d;" <<< "$tree" \
166 | sed -e "/^$TAB\{1,$level\}$GSU_NODE_NAME_PATTERN/,\$d" \
167 | sed -e "/^$TAB\{$(($level + 2))\}/d")"
173 local tree="$1" TAB=' '
175 result="$(grep "^${TAB}${GSU_NODE_NAME_PATTERN}" <<< "$tree")"
180 local header="$1" old_header
181 local tree="$2" subtree="$3"
184 gsu_menu "$header" "$subtree"
185 (($ret != 0)) && return
186 [[ -z "$result" ]] && return
187 if [[ "${result%/}" != "$result" ]]; then
190 _get_subtree "$tree" "$header"
191 _browse "$header" "$tree" "$result"
195 eval ${gsu_name}_$result
201 local tree="$1" subtree
204 type -t dialog &> /dev/null
206 gsu_msg "dialog executable not found"
209 _get_root_nodes "$tree"
211 _browse "$gsu_name main menu" "$tree" "$subtree"