summaryrefslogtreecommitdiffstats
path: root/files/dialog-functions.sh
diff options
context:
space:
mode:
authorRobby Workman <rworkman@slackware.com>2017-10-19 13:49:43 -0500
committerRobby Workman <rworkman@slackware.com>2017-10-22 01:59:41 -0500
commit406e0e84f5321652fa1a539d80be6ca5df1ffb1b (patch)
tree0225a21dca44efe55180ee2e83027d5eaca2ddec /files/dialog-functions.sh
downloadslackpkg-406e0e84f5321652fa1a539d80be6ca5df1ffb1b.tar.xz
*: Initial commit of slackpkg (as of 2.82.2 release)2.82.2
Diffstat (limited to 'files/dialog-functions.sh')
-rw-r--r--files/dialog-functions.sh75
1 files changed, 75 insertions, 0 deletions
diff --git a/files/dialog-functions.sh b/files/dialog-functions.sh
new file mode 100644
index 0000000..042906c
--- /dev/null
+++ b/files/dialog-functions.sh
@@ -0,0 +1,75 @@
+# Dialog functions
+# Original functions from slackpkg modified by Marek Wodzinski (majek@mamy.to)
+#
+export DIALOG_CANCEL="1"
+export DIALOG_ERROR="126"
+export DIALOG_ESC="1"
+export DIALOG_EXTRA="3"
+export DIALOG_HELP="2"
+export DIALOG_ITEM_HELP="2"
+export DIALOG_OK="0"
+
+# Show the lists and asks if the user want to proceed with that action
+# Return accepted list in $SHOWLIST
+#
+if [ "$DIALOG" = "on" ] || [ "$DIALOG" = "ON" ]; then
+ function showlist() {
+ if [ "$ONOFF" != "off" ]; then
+ ONOFF=on
+ fi
+ rm -f $TMPDIR/dialog.tmp
+
+ if [ "$2" = "upgrade" ]; then
+ ls -1 $ROOT/var/log/packages > $TMPDIR/tmplist
+ for i in $1; do
+ BASENAME=$(cutpkg $i)
+ PKGFOUND=$(grep -m1 -e "^${BASENAME}-[^-]\+-\(noarch\|fw\|${ARCH}\)" $TMPDIR/tmplist)
+ echo "$i \"\" $ONOFF \"currently installed: $PKGFOUND\"" >>$TMPDIR/dialog.tmp
+ done
+ HINT="--item-help"
+ else
+ for i in $1; do
+ echo "$i \"\" $ONOFF" >>$TMPDIR/dialog.tmp
+ done
+ HINT=""
+ fi
+
+ # This is needed because dialog have a limit of arguments.
+ # This limit is around 20k characters in slackware 10.x
+ # Empiric tests on slackware 13.0 got a limit around 139k.
+ # If we exceed this limit, dialog got a terrible error, to
+ # avoid that, if the number of arguments is bigger than
+ # DIALOG_MAXARGS we remove the hints. If even without hints
+ # we can't got less characters than DIALOG_MAXARGS we give an
+ # error message to the user ask him to not use dialog
+ if [ $(wc -c $TMPDIR/dialog.tmp | cut -f1 -d\ ) -ge $DIALOG_MAXARGS ]; then
+ mv $TMPDIR/dialog.tmp $TMPDIR/dialog2.tmp
+ awk '{ NF=3 ; print $0 }' $TMPDIR/dialog2.tmp > $TMPDIR/dialog.tmp
+ HINT=""
+ fi
+ cat $TMPDIR/dialog.tmp|xargs dialog --title $2 --backtitle "slackpkg $VERSION" $HINT --checklist "Choose packages to $2:" 19 70 13 2>$TMPDIR/dialog.out
+ case "$?" in
+ 0|123)
+ dialog --clear
+ ;;
+ 1|124|125|126|127)
+ dialog --clear
+ echo -e "DIALOG ERROR:\n-------------" >> $TMPDIR/error.log
+ cat $TMPDIR/dialog.out >> $TMPDIR/error.log
+ echo -e "-------------
+If you want to continue using slackpkg, disable the DIALOG option in
+/etc/slackpkg/slackpkg.conf and try again.
+
+Help us to make slackpkg a better tool - report bugs to the slackpkg
+developers" >> $TMPDIR/error.log
+ cleanup
+ ;;
+ esac
+ SHOWLIST=$(cat $TMPDIR/dialog.out | tr -d \")
+ rm -f $TMPDIR/dialog.*
+ if [ -z "$SHOWLIST" ]; then
+ echo "No packages selected for $2, exiting."
+ cleanup
+ fi
+ }
+fi