#/**
#         ogr GetPath [ str_repo | int_ndisk int_nfilesys ] path_filepath
#@brief   Inicia el proceso de arranque de un sistema de archivos.
#@param   path_filepath   camino del fichero (independiente de mayúsculas)
#@param   str_repo        repositorio de ficheros
#@param   int_ndisk       nº de orden del disco
#@param   int_nfilesys    nº de orden del sistema de archivos
#@return  path_file - camino completo real del fichero.
#@note    repo = { REPO, CACHE, CDROM }
#@note    Requisitos: \c grep \c sed
#@exception OG_ERR_FORMAT    Formato incorrecto.
#@exception OG_ERR_NOTFOUND  Fichero o dispositivo no encontrado.
#@exception OG_ERR_FILESYS   Tipo de partición desconocido o no se puede montar.
#@warning En caso de error, sólo devuelve el código y no da mensajes.
#@todo    Terminar de definir parámetros para acceso a repositorios.
#@version 0.1 -  Integracion para Opengnsys  -  HIDRA: CaminoWindows.sh; EAC: GetPath(), FormatSintaxSpacePath(), FormatSintaxBackSlashPath (),  en FileSystem.lib 
#@author Ramon Gomez, ETSII Universidad de Sevilla 
#@Date    2008/10/10
#@author  Antonio J. Doblas Viso. Universidad de Malaga
#@date    2008/10/27
#@version 0.9 - Pruebas con OpenGnSys.
#@author  Ramon Gomez, ETSII Universidad de Sevilla
#@date    2009-09-15
#*/ ##
# Variables locales.
local MNTDIR FILE PREVFILE FILEPATH CURRENTDIR

# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
    ogr Help "$FUNCNAME" "$FUNCNAME [ str_repo | int_ndisk int_nfilesys ] path_filepath" \
           "$FUNCNAME \"/mnt/sda1/windows/system32\"  ==>  /mnt/sda1/WINDOWS/System32" \
           "$FUNCNAME REPO /etc/fstab  ==>  /opt/opengnsys/images/etc/fstab" \
           "$FUNCNAME 1 1 \"/windows/system32\"  ==>  /mnt/sda1/WINDOWS/System32"
    return
fi

# Procesar camino según el número de parámetros.
case $# in
    1)	FILE="$1" ;;
    2)	case "$1" in
            REPO|repo)
                FILE="$OGIMG/$2" ;;
            CACHE|cache)
                FILE="$(ogr MountCache)/$OGIMG/$2" ;;
            CDROM|cdrom)
                FILE="$(ogr MountCdrom)/$2" ;;
            *)  ogr RaiseError $OG_ERR_FORMAT
                return $? ;;
        esac ;;
    3)	FILE="$(ogr Mount $1 $2)/$3" ;;
    *)	ogr RaiseError $OG_ERR_FORMAT
        return $? ;;
esac

# Eliminar caracteres \c / iniciales, finales y duplicados.
CURRENTDIR="$PWD"
FILE="$(echo $FILE|sed -e 's/\(\/\)*\1/\//g' -e 's/^\///' -e 's/\/$//')"
PREVFILE=""
FILEPATH="/"
while [ "$FILE" != "$PREVFILE" ]; do
    # Busca el nombre correcto en el directorio actual.
    cd "$FILEPATH"
        # /* (comentario Doxygen)
    FILEPATH="${FILEPATH}/$(ls -A | grep -i -m1 "^${FILE%%/*}$")" || return $?
    PREVFILE="$FILE"
    FILE="${FILE#*/}"
done
# Muestra el camino Linux, quitando el / inicial duplicado.
[ "$FILEPATH" != "/" ] && echo ${FILEPATH#/}
cd $CURRENTDIR
