3 if [[ "$(type -t _gsu_setup)" != "function" ]]; then
4 gsu_dir=${gsu_dir:-${BASH_SOURCE[0]%/*}}
5 . $gsu_dir/common || exit 1
9 export GSU_NODE_NAME_PATTERN='[a-zA-Z_]'
16 gsu_msg "fatal: could not get terminal geometry"
28 dialog --infobox "$1" $result
31 gsu_checklist_all_on()
35 local i state opts num=0
43 result=$(dialog --checklist "$header" $opts 3>&1 1>&2 2>&3 3>&-)
50 local selected_item="$2"
52 local i state ops num=0
58 if [[ "$i" == "$selected_item" ]]; then
63 ops+=" $i $num $state"
65 result=$(dialog --radiolist "$header" $ops 3>&1 1>&2 2>&3 3>&-)
71 local g text="$1" init="$2"
75 result="$(dialog --inputbox "$text" $g "$init" 3>&1 1>&2 2>&3 3>&-)"
84 dialog --textbox "$file" $result
87 # dialog segfaults if message is too long. Hence we always use a temporary file
90 local tmp="$(mktemp gsu_msgbox.XXXXXXXXXX)"
93 dialog --msgbox "mktemp error" 0 0
103 local tmp="$(mktemp)"
106 dialog --msgbox "mktemp error" 0 0
110 echo "exit code: $?" >> "$tmp"
120 dialog --yesno "$text" $result
122 if (($ret == 0)); then
124 elif (($ret == 1)); then
133 local header="${1:-root}"
135 local i state opts num=0
143 result="$(dialog --menu "$gsu_banner_txt ($header)" $opts 3>&1 1>&2 2>&3 3>&-)"
149 local tmp="${1%%$GSU_NODE_NAME_PATTERN*}"
155 local tree="$1" root="${2%/}"
158 first="$(grep -n "$TAB\{1,\}$root/" <<< "$tree")"
159 [[ -z "$first" ]] && return
161 line_num="${first%%:*}"
162 _get_level "${first#*:}"
165 #echo "line: $line_num, root: $root, indent level: $level"
166 result="$(sed -e "1,${line_num}d;" <<< "$tree" \
167 | sed -e "/^$TAB\{1,$level\}$GSU_NODE_NAME_PATTERN/,\$d" \
168 | sed -e "/^$TAB\{$(($level + 2))\}/d")"
174 local tree="$1" TAB=' '
176 result="$(grep "^${TAB}${GSU_NODE_NAME_PATTERN}" <<< "$tree")"
181 local header="$1" old_header
182 local tree="$2" subtree="$3"
185 gsu_menu "$header" "$subtree"
186 (($ret != 0)) && return
187 [[ -z "$result" ]] && return
188 if [[ "${result%/}" != "$result" ]]; then
191 _get_subtree "$tree" "$header"
192 _browse "$header" "$tree" "$result"
196 eval ${gsu_name}_$result
202 local tree="$1" subtree
204 type -t dialog &> /dev/null
206 gsu_msg "dialog executable not found"
209 _get_root_nodes "$tree"
211 _browse "main menu" "$tree" "$subtree"