#!/bin/dash
VERSIONE='2'
DATA="$(date --date='24 FEB 2010' '+%d %B %Y')"
AUTORE='Alessandro Selli, http://alessandro.route-add.net'
LICENZA='GPL vers. 2 o successiva'
HASH='md5sum'
FONTE=CODICE
NERO='\\033[30m'
BIANCO='\\033[1;37m'
NASCOSTO='\\033[8m'
NORMALE='\\033[0m'
TESTO='NERO'

Uso () {
cat <<EOF

$(basename $0) versione $VERSIONE del $DATA
Di: $AUTORE, sotto licenza $LICENZA

Uso: $(basename $0) [-f|--fonte FONTE] [-a|--algo HASH] [-c|--colore colore] \
                    [-h|-?|--help] [-V|--versione|--version]

dove:
-f | --fonte indica la variabile fonte dei dati (predeterminato: $FONTE)
-a | --algo  indica l'algoritmo o il comando di hash da utilizzarsi
             (predeterminato: $HASH)
-c | --colore indica il colore del testo in output scelto tra nero, bianco e
             nascosto (predeterminato: $(echo $TESTO | tr [A-Z] [a-z]))
-h | --help  fa mostrare queste istruzioni e poi esce
-V | --versione | --version fa mostrare la versione e la data dello script
EOF
}

ErrOpt () {
if test $# -eq 1
then echo "ERRORE: l'opzione '$1' manca del suo parametro" >&2
     echo "Si usi l'opzione '-h' per leggere le istruzioni" >&2
     exit 1
else echo "ERRORE: funzione 'ErrOpt' eseguita con $# parametri invece di uno" >&2
     exit 5
fi
}

while test $# -gt 0
do case "$1" in
        '-f'|'--fonte') if test -n "$2"
              then if test "$2" = $(echo "$2" | sed 's/^-//')
                   then FONTE="$2"
                        shift 2
                   else ErrOpt '-f'
                   fi
              else ErrOpt '-f'
              fi ;;
        '-a'|'--algo') if test -n "$2"
                       then if which "$2" > /dev/null 2>&1
                            then HASH="$2"
                                 shift 2
                            else # Non si trova il comando $2; prova a cercare
                                 # il comando $2 con l'eventuale aggiunta di
                                 # "sum" alla fine, avesse l'utente speficicato
                                 # solo l'algoritmo e non l'eseguibile
                                 if which "${2%sum}sum" > /dev/null 2>&1
                                 then HASH="${2%sum}sum"
                                      shift 2
                                 else echo "ERRORE: ne\` il comando di hash \"$2\" ne\` \"${2%sum}sum\" compaiono nel PATH" >&2
                                      exit 2
                                 fi
                            fi
                       else ErrOpt '-a'
                       fi ;;
        '-c'|'--colore') if test -n "$2"
                         then case "$2" in
                                   'nero') TESTO='NERO' ;;
                                   'bianco') TESTO='BIANCO' ;;
                                   'nascosto') TESTO='NASCOSTO' ;;
                                   'normale') TESTO='NORMALE' ;;
                                   -*) ErrOpt '-c' ;;
                                   *) echo "ERRORE: parametro sconosciuto per l'opzione '-c'" >&2
                                      exit 4 ;;
                              esac
                              shift 2
                         else ErrOpt '-c'
                         fi

 ;;
	'-V'|'--versione'|'--version') echo "Versione $VERSIONE del $DATA"
		echo "Autore: $AUTORE"
		echo "Licenza: $LICENZA"
		exit ;;
        '-h'|'-?'|'--help') Uso ; exit ;;
        *) echo "ERRORE: parametro o opzione sconosciuta ($1)" >&2
           Uso ; exit 3 ;;

   esac
done

if test -n "$(eval echo -n \$$FONTE)"
then echo "[$(eval echo \$$TESTO)$(eval echo \$$FONTE | $HASH | cut -d \  -f 1 )\033[0m]"
else echo "ERRORE: \"$FONTE\" contiene una stringa nulla" >&2
     exit 6
fi


