#!/bin/bash
+# Copyright (C) 2006 Andre Noll
+# Licensed under the LGPL, version 3. See COPYING and COPYING.LESSER.
if [[ "$(type -t _gsu_setup)" != "function" ]]; then
gsu_dir=${gsu_dir:-${BASH_SOURCE[0]%/*}}
result="$y $x"
}
+_set_dialog_ret()
+{
+ local ec="$1"
+
+ case "$ec" in
+ 0) ret=$GSU_SUCCESS;;
+ 1) ret=1;; # cancelled
+ *)
+ result="dialog exit code $ec"
+ ret=-$E_GSU_DIALOG
+ esac
+}
+
+# Open a dialog box which asks the user to input a text
+#
+# Usage: gsu_input_box <text> <init>
+#
+# <text> is displayed above of the input field, which is is preset to <init>.
+# The entered text is returned in $result. On success (user pressed OK)
+# the function returns zero. If the user selected Cancel, the return value is
+# one. On dialog errors, a negative error code is returned.
gsu_inputbox()
{
local g text="$1" init="$2"
_get_geometry
g="$result"
result="$(dialog --inputbox "$text" $g "$init" 3>&1 1>&2 2>&3 3>&-)"
- if (($? != 0)); then
- ret=-$E_GSU_DIALOG
- result='inputbox'
- return
- fi
- ret=$GSU_SUCCESS
+ _set_dialog_ret $?
}
+# Show the given file in a text box
+#
+# Usage: gsu_textbox <path>
+#
+# The box has an OK button which closes the box when activated.
gsu_textbox()
{
local g file="$1"
ret=-$E_GSU_DIALOG
result='textbox'
- dialog --textbox "$file" $g || return
- ret=$GSU_SUCCESS
+ dialog --textbox "$file" $g
+ _set_dialog_ret $?
}
-# dialog segfaults if message is too long. Hence we always use a temporary file
+# Show a message in a text box
+#
+# Usage: gsu_msgbox <text>
+#
+# This is like gsu_textbox() but the text is passed as a string.
gsu_msgbox()
{
- local tmp="$(mktemp gsu_msgbox.XXXXXXXXXX)"
-
- if (($? != 0)); then
- ret=-$E_GSU_MKTEMP
- result='temp file for textbox'
- return
- fi
+ local tmp
+
+ # Some versions of dialog segfault if the text is too long. Hence we
+ # always use a temporary file.
+ gsu_make_tempfile 'gsu_msgbox.XXXXXXXXXX'
+ (($ret < 0)) && return
+ tmp="$result"
+ trap "rm -f $tmp" EXIT
echo "$1" > "$tmp"
gsu_textbox "$tmp"
rm -f "$tmp" # ignore errors
opts+=" $i $num"
done
result="$(dialog --menu "$gsu_banner_txt ($header)" $opts 3>&1 1>&2 2>&3 3>&-)"
- case $? in
- 0) ret=$GSU_SUCCESS;;
- 1) ret=1;; # cancelled
- *)
- result="menu error $ret"
- ret=-$E_GSU_DIALOG
- esac
+ _set_dialog_ret $?
}
_get_level()