#!/bin/bash

#_______________________________________________________________________________________________________________________________
#
# Formato de salida:
# disk=Número de disco\tpar=Número de particion\tcod=Código de partición\tsfi=Sistema de ficheros\tsoi=Sistema instalado\ttam=Tamaño de la partición\n
#_______________________________________________________________________________________________________________________________


# No registrar los errores.
export DEBUG="no"

ser=$(ogGetSerialNumber)
cfg=""
disks=$(ogDiskToDev | wc -w)
for ((dsk=1; dsk<=$disks; dsk++)); do
    particiones=$(ogGetPartitionsNumber $dsk)
    particiones=${particiones:-0}
    # Tipo de tabla de particiones: 1=MSDOS, 2=GPT
    ptt=$(ogGetPartitionTableType $dsk)
    case "$ptt" in
        MSDOS)  ptt=1 ;; 
        GPT)    ptt=2 ;; 
        LVM)    ptt=3 ;; 
        ZPOOL)  ptt=4 ;; 
        *)      ptt=0 ;; 
    esac
    # Información de disco (partición 0)
    cfg="$cfg$dsk:0:$ptt:::$(ogGetDiskSize $dsk):0;"
    for ((par=1;par<=$particiones;par++)); do
	# Código del identificador de tipo de partición
	cod=$(ogGetPartitionId $dsk $par 2>/dev/null)
	# Tipo del sistema de ficheros
	fsi=$(getFsType $dsk $par 2>/dev/null)
	fsi=${fsi:-"EMPTY"}
	# Tamaño de la particón
	tam=$(ogGetPartitionSize $dsk $par 2>/dev/null)
	tam=${tam:-"0"}
	# Sistema operativo instalado 
	case "$fsi" in
		""|EMPTY|LINUX-SWAP|LINUX-LVM|ZVOL)
			soi=""; uso=0 ;;
		*)	if [ -n "$(ogMount $dsk $par 2>/dev/null)" ]; then
				soi=$(getOsVersion $dsk $par 2>/dev/null | cut -f2 -d:)
				# Hacer un 2º intento para algunos casos especiales.
				[ -z "$soi" ] && soi=$(getOsVersion $dsk $par 2>/dev/null | cut -f2 -d:)
				# Sistema de archivos para datos (sistema operativo "DATA")
				[ -z "$soi" -a "$fsi" != "EMPTY" -a "$fsi" != "CACHE" ] && soi="DATA"
				# Obtener porcentaje de uso.
				uso=$(df $(ogGetMountPoint $dsk $par) | awk '{getline; printf "%d",$5}')
				uso=${uso:0}
			else
				soi=""; uso=0
			fi
			;;
   	esac
	cfg="$cfg$dsk:$par:$cod:$fsi:$soi:$tam:$uso;"
    done
done

# Crear configuración por defecto para cliente sin disco.
[ -z "$cfg" ] && cfg="1:0:0:::0;"

# Guardar salida en fichero temporal.
cfgfile=/tmp/getconfig
echo "${ser:+$ser;}$cfg" > $cfgfile

# Crear el menú por defecto a partir del fichero generado (no dar ninguna salida).
generateMenuDefault &>/dev/null

# Componer salida formateada.
awk '{  n=split($0,sep,";");
	for (i=1; i<n; i++){
	    c=split (sep[i],dua,":");
	    if (i==1 && c==1)
		printf ("ser=%s\n", dua[1]);
	    else
		printf ("disk=%s\tpar=%s\tcpt=%s\tfsi=%s\tsoi=%s\ttam=%s\tuso=%s\n",
		        dua[1],dua[2],dua[3],dua[4],dua[5],dua[6],dua[7]);
	    }
     }' $cfgfile

# Borramos marcas de arranque de Windows
rm -f /mnt/*/ogboot.* /mnt/*/*/ogboot.*

# Volver a registrar los errores.
unset DEBUG

