socle_bash/lib/affiche-ligne.lib
2017-07-21 09:44:49 +02:00

170 lines
7.0 KiB
Plaintext
Executable File

##----------------------------------------------------------------------------
## Script : affiche_ligne.lib
## Module Puppet : gnc-script_core_dtsi
## Auteur : Emmanuel Confrere
## Date : 13-04-2017
## Version : 1.1.0
## Objet : Permet d'afficher sur la sortie standard un texte sous forme de tableau
##
## Fonction : fct_affiche_ligne
##
## Detail : Definition de l'entete du tableau :
## fct_affiche_ligne entete "{Titre}" "{Colonne_1},{Taille_1}" "{Colonne_2},{Taille_2}" "{Colonne_3},{Taille_3}" "{Colonne_4},{Taille_4}" ...
## fct_affiche_ligne entete "{Titre}" "Groupe1({Colonne_1},{Taille_1}:{Colonne_2},{Taille_2})" "{Colonne_3},{Taille_3}" "Groupe2({Colonne_4},{Taille_4}:...)" ...
##
## Affichage des lignes du tableau :
## fct_affiche_ligne "${Variable_1}" "${Variable_2}" "${Variable_3}" "${Variable_4}" ...
##
## Affichage du pied
## fct_affiche_ligne pied
##
## Affichage d une ligne de separation
## fct_affiche_ligne sep
##
## Les trois forme de declaration doivent apparaitre dans l ordre :
## fct_affiche_ligne entete -> Initialise le tableau
## fct_affiche_ligne -> Affiche une ligne
## fct_affiche_ligne pied -> Libere la configuration du tableau
##
# ----------------------------------------------------------------------------
# Mise a jour :
# 1.0.0 10-02-2016 - Emmanuel Confrere - Cre : Reprise du script du socle Oracle
# 1.1.0 13-04-2017 - Emmanuel Confrere - Evo : Ajout de l option "sep"
##----------------------------------------------------------------------------
function fct_affiche_ligne
{
local L_NB_PARAM=$#
local L_PARAM=""
local L_IDX_PARAM=1
local L_IDX_COL=1
local L_MESSAGE=""
local L_ENTETE="non"
local L_PIED="non"
local L_SEP="non"
local L_GROUPE="non"
local L_GRP_NOM=""
local L_TAILLE_GRP=0
local L_COL_LISTE=""
local L_COL=""
local L_GRP_MESS_L1=""
local L_GRP_MESS_L2=""
local L_GRP_MESS_L3=""
local L_OLD_IFS=""
# - recuperation des parametres en entree
[ -n "${IFS}" ] && L_OLD_IFS=${IFS}
IFS="@"
while [ ${L_IDX_PARAM} -le ${L_NB_PARAM} ]
do
L_PARAM[${L_IDX_PARAM}]=`echo $1|cut -d, -f1`
[ "${L_PARAM[1]}" = "entete" ] && L_ENTETE="oui"
[ "${L_PARAM[1]}" = "pied" ] && L_PIED="oui"
[ "${L_PARAM[1]}" = "sep" ] && L_SEP="oui"
if [ "${L_ENTETE}" = "oui" -a ${L_IDX_PARAM} -gt 2 ]
then
if [ `echo $1|grep -c "("` -eq 1 ]
then
L_GROUPE="oui"
L_TAILLE_GRP=0
L_GRP_NOM=`echo $1|cut -d "(" -f1`
L_COL_LISTE=`echo $1|sed 's/:/@/g;s/^.*(//;s/)//'`
for L_COL in ${L_COL_LISTE}
do
L_PARAM[${L_IDX_PARAM}]=`echo ${L_COL}|cut -d, -f1`
SH_TAILLE_COL[${L_IDX_COL}]=`echo ${L_COL}|cut -d, -f2`
[ -z "${SH_TAILLE_COL[${L_IDX_COL}]}" ] && SH_TAILLE_COL[${L_IDX_COL}]=${#L_PARAM[${L_IDX_PARAM}]}
[ ${SH_TAILLE_COL[${L_IDX_COL}]} -eq 0 ] && SH_TAILLE_COL[${L_IDX_COL}]=${#L_PARAM[${L_IDX_PARAM}]}
SH_TAILLE_COL[${L_IDX_COL}]=$(( ${SH_TAILLE_COL[${L_IDX_COL}]} + 2 ))
SH_TAILLE_TABLEAU=$(( ${SH_TAILLE_TABLEAU} + ${SH_TAILLE_COL[${L_IDX_COL}]} ))
L_TAILLE_GRP=$(( ${L_TAILLE_GRP} + ${SH_TAILLE_COL[${L_IDX_COL}]} + 1 ))
[ ${L_IDX_PARAM} -eq ${L_NB_PARAM} ] && L_GRP_MESS_L3="${L_GRP_MESS_L3}`fct_format "${L_PARAM[${L_IDX_PARAM}]}" ${SH_TAILLE_COL[${L_IDX_COL}]} c`"
[ ${L_IDX_PARAM} -ne ${L_NB_PARAM} ] && L_GRP_MESS_L3="${L_GRP_MESS_L3}`fct_format "${L_PARAM[${L_IDX_PARAM}]}" ${SH_TAILLE_COL[${L_IDX_COL}]} c`|"
((L_IDX_COL++))
((L_IDX_PARAM++))
((L_NB_PARAM++))
done
((L_TAILLE_GRP--))
((L_IDX_PARAM--))
((L_NB_PARAM--))
L_GRP_MESS_L1="${L_GRP_MESS_L1}`fct_format "${L_GRP_NOM}" ${L_TAILLE_GRP} c`|"
L_GRP_MESS_L2="${L_GRP_MESS_L2}`fct_format "-" ${L_TAILLE_GRP} r`|"
else
SH_TAILLE_COL[${L_IDX_COL}]=`echo $1|cut -d, -f2`
[ -z "${SH_TAILLE_COL[${L_IDX_COL}]}" ] && SH_TAILLE_COL[${L_IDX_COL}]=${#L_PARAM[${L_IDX_PARAM}]}
[ ${SH_TAILLE_COL[${L_IDX_COL}]} -eq 0 ] && SH_TAILLE_COL[${L_IDX_COL}]=${#L_PARAM[${L_IDX_PARAM}]}
SH_TAILLE_COL[${L_IDX_COL}]=$(( ${SH_TAILLE_COL[${L_IDX_COL}]} + 2 ))
SH_TAILLE_TABLEAU=$(( ${SH_TAILLE_TABLEAU} + ${SH_TAILLE_COL[${L_IDX_COL}]} ))
if [ ${L_IDX_PARAM} -eq ${L_NB_PARAM} ]
then
L_GRP_MESS_L1="${L_GRP_MESS_L1}`fct_format " " ${SH_TAILLE_COL[${L_IDX_COL}]} c`"
L_GRP_MESS_L2="${L_GRP_MESS_L2}`fct_format "${L_PARAM[${L_IDX_PARAM}]}" ${SH_TAILLE_COL[${L_IDX_COL}]} c`"
L_GRP_MESS_L3="${L_GRP_MESS_L3}`fct_format " " ${SH_TAILLE_COL[${L_IDX_COL}]} c`"
else
L_GRP_MESS_L1="${L_GRP_MESS_L1}`fct_format " " ${SH_TAILLE_COL[${L_IDX_COL}]} c`|"
L_GRP_MESS_L2="${L_GRP_MESS_L2}`fct_format "${L_PARAM[${L_IDX_PARAM}]}" ${SH_TAILLE_COL[${L_IDX_COL}]} c`|"
L_GRP_MESS_L3="${L_GRP_MESS_L3}`fct_format " " ${SH_TAILLE_COL[${L_IDX_COL}]} c`|"
fi
((L_IDX_COL++))
fi
fi
shift
((L_IDX_PARAM++))
done
[ "${L_ENTETE}" = "oui" ] && SH_TAILLE_TABLEAU=$(( ${SH_TAILLE_TABLEAU} + ${L_NB_PARAM} - 3 ))
# -- Affichage de la ligne
# -- ---------------------
L_IDX_PARAM=1
L_IDX_COL=1
L_MESSAGE=""
# -- Affichage de l entete du tableau
if [ "${L_ENTETE}" = "oui" ]
then
fct_message -cpt "`fct_format "-" ${SH_TAILLE_TABLEAU} r`"
fct_message -cpt -color jaune "`fct_format "${L_PARAM[2]}" ${SH_TAILLE_TABLEAU} c`"
fct_message -cpt "`fct_format "-" ${SH_TAILLE_TABLEAU} r`"
if [ "${L_GROUPE}" = "oui" ]
then
fct_message -cpt "${L_GRP_MESS_L1}"
fct_message -cpt "${L_GRP_MESS_L2}"
fct_message -cpt "${L_GRP_MESS_L3}"
else
fct_message -cpt "${L_GRP_MESS_L2}"
fi
fct_message -cpt "`fct_format "-" ${SH_TAILLE_TABLEAU} r`"
export SH_TAILLE_TABLEAU SH_TAILLE_COL
L_IDX_PARAM=3
fi
# -- Affichage du corp du tableau
while [ ${L_IDX_PARAM} -le ${L_NB_PARAM} -a "${L_PIED}" = "non" -a "${L_ENTETE}" = "non" ]
do
if [ ${L_IDX_PARAM} -eq ${L_NB_PARAM} ]
then
L_MESSAGE="${L_MESSAGE}`fct_format "${L_PARAM[${L_IDX_PARAM}]}" ${SH_TAILLE_COL[${L_IDX_COL}]} d`"
else
L_MESSAGE="${L_MESSAGE}`fct_format "${L_PARAM[${L_IDX_PARAM}]}" ${SH_TAILLE_COL[${L_IDX_COL}]} d`|"
fi
((L_IDX_PARAM++))
((L_IDX_COL++))
done
[ "${L_PIED}" = "non" -a "${L_ENTETE}" = "non" ] && fct_message -cpt "${L_MESSAGE}"
# -- Affichage du pied et liberation des variables de gestion
if [ "${L_PIED}" = "oui" ]
then
fct_message -cpt "`fct_format "-" ${SH_TAILLE_TABLEAU} r`"
unset SH_TAILLE_TABLEAU SH_TAILLE_COL
fi
# -- Affichage d une ligne de separation
[ "${L_SEP}" = "oui" ] && fct_message -cpt "`fct_format "-" ${SH_TAILLE_TABLEAU} r`"
[ -n "${L_OLD_IFS}" ] && IFS=${L_OLD_IFS} || unset IFS
return 0
}
typeset -Ffx fct_affiche_ligne