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

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

DCMD="dialog"
WCMD="dialog --extra-button --extra-label Back"
LEFT_ALIGN=""
CMD=""
BACKTITLE1='Vector Linux ... at the speed of light'
BACKTITLE2='Vector Linux ... at the speed of turtle'

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


# check 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
    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" --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
}

# In text mode, should monitor the debug from other console
# tail -f /tmp/vasm.debug
# In GUI mode, call vasm from a terminal
dbug ()
{
   if [ "$CMD" ]; 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
}

