#/**
#         ogr DiskToDev [int_ndisk [int_npartition]]
#@brief   Devuelve la equivalencia entre el nº de orden del dispositivo (dicso o partición) y el nombre de fichero de dispositivo correspondiente.
#@param   int_ndisk      nº de orden del disco
#@param   int_npartition nº de orden de la partición
#@return  Para 0 parametros: Devuelve los nombres de ficheros  de los dispositivos sata/ata/usb linux encontrados.
#@return  Para 1 parametros: Devuelve la ruta del disco duro indicado.
#@return  Para 2 parametros: Devuelve la ruta de la particion indicada.
#@exception OG_ERR_FORMAT   Formato incorrecto.
#@exception OG_ERR_NOTFOUND Dispositivo no detectado.
#@note    Requisitos: awk, lvm
#@version 0.1 -  Integracion para Opengnsys  -  EAC: Disk() en ATA.lib;  HIDRA: DetectarDiscos.sh
#@author Ramon Gomez, ETSII Universidad de Sevilla 
#@Date    2008/06/19
#@author  Antonio J. Doblas Viso, Universidad de Malaga
#@date    2008/10/27
#@version 0.9 - Primera version para OpenGNSys
#@author  Ramon Gomez, ETSII Universidad Sevilla
#@date    2009-07-20
#*/ ##
# Variables locales
local ALLDISKS VOLGROUPS DISK PART

# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
    ogr Help "$FUNCNAME" "$FUNCNAME int_ndisk [int_npartition]" \
           "$FUNCNAME      =>  /dev/sda /dev/sdb" \
           "$FUNCNAME 1    =>  /dev/sda" \
           "$FUNCNAME 1 1  =>  /dev/sda1"
    return
fi

# Listar dispositivo para los discos duros (tipos: 3=hd, 8=sd).
ALLDISKS=$(awk '($1==3 || $1==8) && $4!~/[0-9]/ {printf "/dev/%s ",$4}' /proc/partitions)
VOLGROUPS=$(vgs -a --noheadings 2>/dev/null | awk '{printf "/dev/%s ",$1}')
ALLDISKS="$ALLDISKS $VOLGROUPS"

# Mostrar salidas segun el número de parametros.
case $# in
    0)  # Muestra todos los discos, separados por espacios.
        echo $ALLDISKS
        ;;
    1)  # Error si el parámetro no es un digito.
        [ -z "${1/[1-9]/}" ] || ogr RaiseError $OG_ERR_FORMAT || return $?
        DISK=$(echo "$ALLDISKS" | awk -v n=$1 '{print $n}')
        # Error si el fichero no existe.
        [ -e "$DISK" ] || ogr RaiseError $OG_ERR_NOTFOUND "$1" || return $?
        echo "$DISK"
        ;;
    2)  # Error si los 2 parámetros no son digitos.
        [ -z "${1/[1-9]/}" -a -z "${2/[1-9]/}" ] || ogr RaiseError $OG_ERR_FORMAT|| return $?
        DISK=$(echo "$ALLDISKS" | awk -v n=$1 '{print $n}')
        [ -e "$DISK" ] || ogr RaiseError $OG_ERR_NOTFOUND "$1" || return $?
        PART="$DISK$2"
        # Comprobar si es partición.
        if [ -b "$PART" ]; then
            echo "$PART"
        elif [ -n "$VOLGROUPS" ]; then
            # Comprobar si volumen lógico.
		# /* (comentario Doxygen)
            PART=$(lvscan -a 2>/dev/null | grep "'$DISK/" | awk -v n=$2 -F\' '{if (NR==n) print $2}')
		# (comentario Doxygen) */
            [ -e "$PART" ] || ogr RaiseError $OG_ERR_NOTFOUND "$1 $2" || return $?
            echo "$PART"
        else
            ogr RaiseError $OG_ERR_NOTFOUND "$1 $2" || return $?
        fi
        ;;
    *)  # Formato erroneo.
        ogr RaiseError $OG_ERR_FORMAT
        return $OG_ERR_FORMAT
        ;;
esac
