#!/bin/bash
# Set of functions and variables to make my life easier in my shells
# Thunus F. 2002 and then some :-)
# just add . /home/francois/bin/FunctionBib.sh at the top of the program
# (le point devant est important )

declare -r TRUE=0
declare -r FALSE=1
declare -r Quiet=0
declare -r Normal=1
declare -r Verbose=2

#- Position the Cursor:
#  \033[<L>;<C>H
#     Or
#  \033[<L>;<C>f
#  puts the cursor at line L and column C.
#- Move the cursor up N lines:
#  \033[<N>A
#- Move the cursor down N lines:
#  \033[<N>B
#- Move the cursor forward N columns:
#  \033[<N>C
#- Move the cursor backward N columns:
#  \033[<N>D


# Clear the screen, move to (0,0):
CLS="\033[2J"
GREY="\e[30;1m"
RED="\e[31;1m"
REDB="\e[41;1m"
GREEN="\e[32;1m"
GREENB="\e[42;1m"
YLW="\e[33;1m"
YLWB="\e[43;1m"
BLU="\e[34;1m"
BLUB="\e[44;1m"
MAGEN="\e[35;1m"
MAGENB="\e[45;1m"
CYAN="\e[36;1m"
CYANB="\e[46;1m"
STD="\e[0m"
# Save cursor position:
SC="\033[s"
# Restore cursor position:
RC="\033[u"
# Erase to end of line:
ERL="\033[K"

Affiche=1

##################################################################
# Purpose: Initialise les variables de la bibliotheque de fonction
##################################################################
function InitBib () {
BibVersion=1.13 ;
if [[ $DISPLAY ]]; then
  # echo "running under X"
  xsession=`pidof Xorg`;
# else
  # echo "simple terminal"
fi

# inserer ceci au debut du script:
#while getopts 'vV' c
#do
#  case $c in
#    v|V) Verbose=1 ;;
#  esac
#done
if [ "$Affiche" -gt "$Normal" ] ; then Message "Verbose mode selected"; fi
}


##################################################################
# Purpose: affiche une barre de progression selon les parametres
# example Progress 2 10
# utilise les characteres acscii 176/177/178
# marche pas !
##################################################################

function Progress (){

 num=$1
 max=$2
 echo -en $SC$ERL
 for (( j=1; j<=$max; j++ ))
  do
#   echo -en "\o177"
   echo -en "o"
  done
 echo -en $RC
# sleep 2
 for (( j=1; j<=$num; j++ ))
  do
#   echo -en "\o178"
   echo -en "O"
  done
# sleep 2

}

##################################################################
# Purpose: creates a semaphore in /tmp/sem4
# Arguments: 
#   $1 -> nom du semaphore 
#   $2 -> contenu du semaphore
#   $3 -> Time
#   $4 -> semdir
##################################################################
function CreateSem () {
SemName=$1
SemContent=$2
Time=$3
SemDir=$4
if [ "$SemDir" = "" ] ; then
  SemDir=/tmp/sem4
fi
if ! [ -d $SemDir ] ; then mkdir $SemDir ; fi
if [ "$SemName" = "" ] ; then
 die "SemName not defined !" 2 
fi 
stamp1=`date +"%d"`;
stamp4=`date +"%m"`;
stamp2=`date +"%H"`;
stamp3=`date +"%M"`;
if [ "$SemContent" = "" ] ; then
  SemContent="$stamp1/$stamp4 $stamp2:$stamp3: $0" 
fi
if [ "$Time" = "1" ] ; then
 echo -n "$stamp1/$stamp4 $stamp2:$stamp3: "  >> $SemDir/$SemName 
fi
echo  $SemContent >> $SemDir/$SemName 
}

##################################################################
# Purpose: Initialise le log avec time stamp
# Arguments:
#   $1 -> nom (et chemin) du log
##################################################################
function CreateLog () {
LogName=$1
if [ "$LogName" = "" ] ; then
 die "LogName not defined !" 2 
fi 
stamp1=`date +"%d"`;
stamp4=`date +"%m"`;
stamp2=`date +"%H"`;
stamp3=`date +"%M"`;
echo  "$stamp1/$stamp4 $stamp2:$stamp3: $0 starting"  >> $LogName
}


##################################################################
# Purpose: ecrit un message dans le log avec time stamp
# Arguments:
#   $1 -> String a ecrire
##################################################################
function WriteLog () {
if [ "$LogName" = "" ] ; then
 die "LogName not defined !" 2 
fi 
stamp1=`date +"%d"`;
stamp4=`date +"%m"`;
stamp2=`date +"%H"`;
stamp3=`date +"%M"`;
echo  "$stamp1/$stamp4 $stamp2:$stamp3: $1"  >> $LogName
}

##################################################################
# Purpose: Affiche un message avec echo ou un pop-up
# Arguments:
#   $1 -> String a afficher
##################################################################

function Message () {
if [ "$Affiche" -gt $Quiet ] ; then
 if [ $xsession ]; then   
   zenity --timeout 3  --info --title "Message:" --text="$1" ;
 else
   echo -e "$1";
 fi
fi
}

##################################################################
# Purpose: Affiche un message si la variage dbg est on
# Arguments:
#   $1 -> String a afficher
##################################################################
function DbgMsg () {
 if [ $debug ]; then Message "Dbg: "$1 ; fi
}


##################################################################
# Purpose: Converts a string to lower case
# Arguments:
#   $1 -> String to convert to lower case
##################################################################
function ToLower() 
{
    local str="$@"
    local output     
    output=$(tr '[A-Z]' '[a-z]'<<<"${str}")
    echo $output
}

##################################################################
# Purpose: Display an error message and die
# Arguments:
#   $1 -> Message
#   $2 -> Exit status (optional)
##################################################################
function Die() 
{
    local m="$1"	# message
    local e=${2-1}	# default exit status 1
    Message "$m" 
    exit $e
}

##################################################################
# Purpose: Return true if script is executed by the root user
# Arguments: none
# Return: True or False
##################################################################
function IsRoot() 
{
   [ $(id -u) -eq 0 ] && return $TRUE || return $FALSE
}


##################################################################
# Purpose: Return true if expression is integer
# Arguments: the variable
# Return: True or False
# use like this: if $(is_int "$pidBoost");
##################################################################
function IsInt() 
{ 
return $(test "$@" -eq "$@" > /dev/null 2>&1); 
}
