#!/bin/sh
# general purpose functions for vasm
#
# GNU GPL (c) Kocil, 2003
#         (c) VLocity Linux, 2003

# flag that I've been loaded
VASM_FUNCTIONS=1
# echo "loading functions ....."

PATH="$PATH:/sbin:/usr/sbin:/usr/X11/bin"

## This complicated scheme simply allow you to
## - start VASM with dialog on TUI
## - start VASM with Xdialog on GUI if available
## - start VASM with xterm+dialog on GUI

DCMD="dialog"
WCMD="dialog --extra-button --extra-label Back"
LEFT_ALIGN=""
CMD=""
BACKTITLE1='VLocity Linux ... at the speed of light'
BACKTITLE2='VLocity Linux ... at the speed of turtle'
BACKTITLE=${BACKTITLE:-"$BACKTITLE1"}

if [ -z "$DIALOG" ]; then
  if [ "$DISPLAY" ]; then
    if which Xdialog &>/dev/null; then
      DCMD="Xdialog --wrap" 
      WCMD="Xdialog --wizard --wrap"
      CMD="xterm -e "
      LEFT_ALIGN="--left"
      BACKTITLE1=''
      BACKTITLE2=''
      BACKTITLE=''
    else
      #echo $0 "$@"
      #read pause
      export DIALOG="dialog"
      exec xterm -e $0 "$@"
    fi
  fi
else
  DCMD=$DIALOG
fi

## checking root
check_root() {
  if [ ! "$UID" = "0" ]; then
    $DCMD --backtitle "$BACKTITLE" --title " SORRY " --msgbox \
"\nThis is a root only configurator. Please either:\n
- Login as root \n
- Use su to become a root first\n
- Call sudo vasm" 0 0 2> /dev/null
    clean_exit 1
  fi
}

## checking if X is running
check_xwindow() {
  if [ "$DISPLAY" ] || ! skill -n "X" &>/dev/null; then
    $DCMD --backtitle "$BACKTITLE" --title " SORRY " --msgbox "\n
This program cannot be used when X-Window is running.\n
Please, terminate X-Window first.\n" 0 0 2>/dev/null
    clean_exit 1
  fi
}

###################################################                                                                                            
# tmp files & exit from it
clean_tmp()
{
  [ "$fmenu" ] && rm -f $fmenu
  [ "$freply" ] && rm -f $freply
   rm -f /tmp/vasm.debug
}

clean_exit()
{
  clean_tmp
  exit $1
}

[ -z "$fmenu" ] && fmenu=`mktemp -q /tmp/menu.XXXXXX`
[ -z "$freply" ] && freply=`mktemp -q /tmp/reply.XXXXXX`
if [ -z "$fmenu" ] || [ -z "$freply" ]; then
  echo Can not create temporary file
  clean_exit -1
fi

####################################################
# General purpose display

inputwizard() { 
  local TEXT="\n$1"
  local TITLE=${2:-"INPUT"}
  $WCMD --backtitle "$BACKTITLE" --title "$TITLE" --inputbox "$TEXT" 10 60 $3 2> $freply
}

passwordwizard() { 
  local TEXT="\n$1"
  local TITLE=${2:-"INPUT PASSWORD"}
  $WCMD --backtitle "$BACKTITLE" --title "$TITLE" --passwordbox "$TEXT" 10 60 2> $freply
}

yesnowizard() { 
  local TEXT="\n$1"
  local TITLE=${2:-"CONFIRM"}
  $DCMD --backtitle "$BACKTITLE" --title "$TITLE" --yesno "$TEXT" 10 50 2> $freply
}


####################################################
# quick box, for short 1 line TEXT only
inputbox() { 
  local TEXT="\n$1"
  local TITLE=${2:-"INPUT"}
  $DCMD --backtitle "$BACKTITLE" --title "$TITLE" --inputbox "$TEXT" 10 60 2> $freply
}

passwordbox() { 
  local TEXT="\n$1:"
  local TITLE=${2:-"PASSWORD"}
  $DCMD --backtitle "$BACKTITLE" --title "$TITLE" --insecure --passwordbox "$TEXT" 10 60 2> $freply
}

yesnobox() { 
  local TEXT="\n$1"
  local TITLE=${2:-"CONFIRM"}
  $DCMD --backtitle "$BACKTITLE" --title "$TITLE" --yesno "$TEXT" 0 0 2> $freply
}

infobox() { 
  local TEXT="\n$1"
  local TITLE=${2}
  local WIDTH=`expr ${#1} + 4`
  local HEIGHT=6
  [ "$CMD" ] && HEIGHT=8
  $DCMD --backtitle "$BACKTITLE" --title "$TITLE" --infobox "$TEXT" $HEIGHT $WIDTH 2> $freply
}

retrybox() { 
  local TEXT="\n$1"
  local TITLE=${2:-"ERROR"}
  local WIDTH=`expr ${#1} + 6`
  local HEIGHT=9
  [ "$CMD" ] && HEIGHT=11
  $DCMD --backtitle "$BACKTITLE" --title "$TITLE" --ok-label "Retry" \
    --msgbox "$TEXT" $HEIGHT $WIDTH 2> $freply
}

errorbox() { 
  local TEXT="\n$1"
  local TITLE=${2:-"ERROR"}
  local WIDTH=`expr ${#1} + 6`
  $DCMD --backtitle "$BACKTITLE" --title "$TITLE" --ok-label "Cancel" \
    --msgbox "$TEXT" 10 $WIDTH 2> $freply
}

msgbox() { 
  local TEXT="\n$1"
  local TITLE=${2:-"ERROR"}
  $DCMD --backtitle "$BACKTITLE" --title "$TITLE" --msgbox "$TEXT" 0 0 2> $freply
}

dbug_start()
{
   rm -f /tmp/vasm.debug
}

# Only print to terminal in GUI mode
dbug ()
{
   if [ "$CMD" ] && [ "$VASM_DEBUG" ]; then
   #echo $* >> /tmp/vasm.log
     echo $*
   #else
   #echo $* >> /tmp/vasm.log
   fi
}

## Manage back/OK/cancel
## Call this wizard menuA [ menuB [ ... ]] 
wizard()
{
   if [ -z "$1" ]; then
      clean_exit 0;
   fi

   local STATUS=0
   local PROG=$1
   shift
   
   # Invoke the menu
   while [ 0 ]; do
     dbug $PROG
     $PROG $STATUS
     STATUS=$?
     dbug $PROG result=$STATUS
     case $STATUS in
       0)   # OK
       wizard "$@"
       STATUS=$?
       ;;
       2|3|255)   # BACK
       return 3
       ;;     
       1) # Cancel 
       clean_exit 1     
       ;;   
     esac
   done
}

