#/**
#         ogr Boot int_ndisk int_nfilesys
#@brief   Inicia el proceso de arranque de un sistema de archivos.
#@param   int_ndisk     nº de orden del disco
#@param   int_nfilesys  nº de orden del sistema de archivos
#@return  (activar el sistema de archivos).
#@exception OG_ERR_FORMAT    Formato incorrecto.
#@exception OG_ERR_NOTFOUND  Disco o particion no corresponden con un dispositivo.
#@exception OG_ERR_FILESYS   Tipo de sistema de archivos desconocido o no se puede montar.
#@exception OG_ERR_NOTOS     La partición no tiene instalado un sistema operativo.
#@note    En Linux, debe arrancarse la partición del directorio \c /boot
#@version 0.1 - Integracion para OpenGNSys. - EAC: HDboot(); BootLinuxEX() en Boot.lib  
#@author  Antonio J. Doblas Viso, Universidad de Malaga
#@date    2008-10-27
#@version 0.9 - Adaptacion para OpenGNSys.
#@author  Ramon Gomez, ETSII Universidad de Sevilla
#@date    2009-09-11
#*/ ##
# Variables locales.
local PART TYPE MNTDIR PARAMS KERNEL INITRD APPEND FILE LOADER

# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
    ogr Help "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \
           "$FUNCNAME 1 1"
    return
fi
# Error si no se reciben 2 parámetros.
[ $# == 2 ] || ogr RaiseError $OG_ERR_FORMAT || return $?

# Detectar tipo de sistema de archivos y montarlo.
PART=$(ogr DiskToDev $1 $2) || return $?
TYPE=$(ogr GetFsType $1 $2) || return $?
MNTDIR=$(ogr Mount $1 $2) 2>/dev/null
[ -z "$MNTDIR" ] && ogr RaiseError OG_ERR_PARTITION "$1, $2" && return $?

case "$TYPE" in
    EXT[234]|REISERFS|REISER4|JFS|XFS)
        # Obtiene los parámetros de arranque para Linux.
        PARAMS=$(ogr LinuxBootParameters $1 $2) || return $?
        read -e KERNEL INITRD APPEND <<<"$PARAMS"
        # Si no hay kernel, no hay sistema operativo.
        [ -z "$KERNEL" ] && ogr RaiseError $OG_ERR_NOTOS && return $?
        # Arrancar de partición distinta a la original.
        [ -e "$MNTDIR/etc" ] && APPEND=$(echo $APPEND | awk -v P="$PART " '{sub (/root=[-+=_/a-zA-Z0-9]* /,"root="P);print}')
        # Configurar kernel Linux con los parámetros leídos de su GRUB.
        kexec -l "${MNTDIR}${KERNEL}" --append="$APPEND" --initrd="${MNTDIR}${INITRD}"
        ;;
    NTFS|FAT32)
        # Compruebar si hay un cargador de Windows.
        for f in io.sys ntldr bootmgr; do
            FILE="$(ogr GetPath $1 $2 $f 2>/dev/null)"
            [ -n "$FILE" ] && LOADER="$f"
        done
        [ -z "$LOADER" ] && ogr RaiseError $OG_ERR_NOTOS && return $?
        # Activar la partición y copiar Grub4DOS.
        ogr SetPartitionActive $1 $2
        cp $OGLIB/grub4dos/* $MNTDIR    # */ (Comentario Doxygen)
        kexec -l $MNTDIR/grub.exe --append=--config-file="root (hd$[$1-1],$[$2-1]); chainloader (hd$[$1-1],$[$2-1])/$LOADER; tpm --init"
        ;;
    *)  ogr RaiseError $OG_ERR_FILESYS "$1, $2"
        return $?
        ;;
esac

# Arrancar.
kexec -e
