#####    PRINCIPE DE TRAITEMENT    ####

# Differentes commandes sont enchainees (par des pipes) pour finalement produire un fichier
# qui contiendra le script d'affichage des resultats


# La commande df fournit un fichier se prsentant sous la forme suivante
# que l'on trie par ordre alphabtique des noms des points de montage

#      Filesystem           1M-blocks      Used Available Use% Mounted on
#      /dev/hda3                 1675       924       666  58% /
#      /dev/hda1                 1002       377       625  38% /winc
#      /dev/hda5                  798       402       396  50% /wind
#      /dev/hda6                 1503       583       920  39% /wine
#      /dev/hda7                 1042       157       833  16% /home

# Les lignes  traiter contiennent le mot /dev/

# Rcuprer les donnes par gawk pour paramtrer une commande cut qui 
# taillera les barres d'histogrammes  la longueur voulue
# Les donnes en entre de cut sont disposes ainsi :
#	1  10     : nom du point de montage (col. 6 Mounted on)
#	12  14	   : % occup (col. 5 Use%)
# 	16  18	   : % libre  (100 - col. 5)
#	20  69	   : serie de 50 X (1X=2%) pour la taille occupe
#	70  119   : serie de 50 . 	   pour la taille libre	
#      	120  fin  : taille restante (col. 4 Available)

# Chaque ligne genere une commande cut adapte. La sortie est dirige vers 
# un fichier qui sera ensuite xcut.


### Traitement des options

# Examiner les parametres recus dans une boucle de taille indeterminee
for i
do

    # Si h, afficher l'aide
		[ $i == -h ] && {   echo OPTIONS
			echo "  -h : aide"
			echo "  -n : tri par nom de point de montage (dfaut)"
			echo "  -d : tri par % disponible"
			echo "  -t : tri par taille disponible"
			echo "  -x : affichage en mode graphique (dfaut)"
			echo "  -v : affichage en mode vga texte"
			exit
                    }
	# determiner le critere de classement	
	[ $i == -n ] && { ordretri="-k 6" ; texte="par nom" ; }
	[ $i == -d ] && { ordretri="-rn -k 5 " ; texte="par % disponible" ;}
	[ $i == -t ] && { ordretri='-k 4 -n' ; texte="par taille restante" ; }

	# determiner le mode d'affichage (graphique ou texte)
	[ $i == -x ] && { modeaffich="G" ; }
	[ $i == -v ] && { modeaffich="T" ; }

done



### Traitement de l'affichage

## Traiter en mode texte ou en mode graphique en couleurs

if [ $modeaffich == T ] 
then

df -m | sort $ordretri | gawk '/dev/ {printf "echo \"%-10s %3d/%3d XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.................................................. %6sM \" | cut -b 1-19,20-%2d,70-%d,121-137 \n",$6,$5,100-$5,$4,int($5/2)+19,119-int($5/2)}'  >/temp/graphdisk

else

df -m | sort $ordretri | gawk '/dev/ {printf "echo -e \"%-10s %3d/%3d \\033[41m                                                  \\033[42m                                                   \\033[40m%6sM \" | cut -b 1-24,25-%2d,75-%d,131-152 \n",$6,$5,100-$5,$4,int($5/2)+24,129-int($5/2)}'  >/temp/graphdisk

fi

## Autoriser l'execution du fichier cree
chmod 777 /temp/graphdisk
chmod +x /temp/graphdisk

## Effacer l'ecran puis afficher le titre
clear
echo
echo "  ESPACE DISQUE       ($texte)"
echo "  =============                                                        Reste"

## Executer le pgm 
/temp/graphdisk
echo
echo

## Afficher la legende en texte
if [ $modeaffich == T ] 
then
	echo "                   XXX = Utilis     ... = Libre"
fi

echo
echo "gd -h pour les options disponibles"
echo
 
