#!/bin/bash

#########################################################
# Auteur : Yassine BELMEHEL
# Date modification : 30/04/2009
# MA VERSION DE BASH :
# GNU bash, version 3.2.39(1)-release (i486-pc-linux-gnu)
# Copyright (C) 2007 Free Software Foundation, Inc.
#########################################################

# On vérifie le nombre d'arguments, l'existence du fichier ainsi que ces droits de lecture.
j=0
ind=0
if [ $# -ge 1 ]  && [ -r $1 ]
then
	hexa=`./gethex $1`
	for i in $hexa
	do
		#limite l'affichage a 16 caracteres par ligne
		if [ $j -eq 16 ]
		then			
			#affichage d'une ligne
			echo "`printf "%08x" $ind` $hexline  |$texte|"
			
			j=0
			hexline=""
			texte=""
			ind=$((ind+16))
			
			#evite que l'on perde le caractère courant (CAD ce que contient $i) lorsque j=16
			hexline=$hexline" "$i
			texte=$texte`echo -e "\x$i"`
			j=$((j+1))
		else
			#permet de forcer un code hexadecimal sur deux digits
			strlen=${#i}
			if [ $strlen -lt 2 ] && [ $i != "0" ]
			then
				i="0"$i
			fi
			
			#recuperation de la ligne hexadecimale et du texte en clair
			if [ $j -eq 8 ]
			then
				hexline=$hexline"  "$i
			else
				hexline=$hexline" "$i
			fi
			
			if [ $i == "0a" ] #permet de préserver l'alignement de la colonne de droite
			then
				texte=$texte"."
			else
				texte=$texte`echo -e "\x$i"`
			fi
			j=$((j+1))
		fi
	done
	
	#permet de recopier l'eventuelle derniere ligne non pleine (CAD j<16)
	echo -n "`printf "%08x" $ind` $hexline"
	echo "							    |$texte|"
else
	echo "Alerte : Veuillez verifier le nombre d'argument et/ou l'existence du fichier ainsi que ces droits de lecture."
	exit 1
fi
