/*--------------------------------------------------------------------
 * FICHERO:  TifLeeDi.c
 * OBJETIVO: Definir la funcin Tif_LeeDirectorio()
 * AUTOR:    Pedro Reina
 * FECHA:    X.26.7.1995
 *------------------------------------------------------------------*/

/*--------------------------------------------------------------------
 * Ficheros de cabecera
 *------------------------------------------------------------------*/

#include "Tiff.h"

/*--------------------------------------------------------------------
 * Definicin de funciones
 *------------------------------------------------------------------*/

/*--------------------------------------------------------------------
 * FUNCION:  Tif_LeeDirectorio()
 * OBJETIVO: Leer un directorio descriptor de imagen
 * ENTRADAS: Un tiff y la posicin del fichero donde comienza el directorio
 * SALIDAS:  Lgica, que indica si todo ha ido bien
 * EJEMPLO:  Tif_LeeDirectorio ( Imagen, 8 )
 * ALGORITMO:
 *      Colocarse en la posicin indicada y leer dos octetos
 *      Calcular el nmero de tags que componen ese directorio
 *      Reservar memoria para el directorio y leerlo
 *      Calcular y anotar el total de bandas de la imagen
 *------------------------------------------------------------------*/
logico Tif_LeeDirectorio (Tiff, Posicion)
tiff   Tiff;
entero Posicion;
  {
  logico   TodoBien = NO;
  memoria  Memoria;
  octeto   Aux[2];
  contador TotalTag, TamanoDirectorio, TotalBanda;
  entero   Alto, FilasPorBanda;

  if ( Fch_Coloca (Tif_Fichero(Tiff), Posicion) &&
       Fch_LeeOcteto (Tif_Fichero(Tiff), Aux, 2) )
    {
    if ( Tif_Formato (Tiff) == TIF_MOTOROLA )
      { TotalTag = Mem_LeeContador (Aux, MEM_MOTOROLA); }

    if ( Tif_Formato (Tiff) == TIF_INTEL )
      { TotalTag = Mem_LeeContador (Aux, MEM_INTEL); }

    Tif_PonTotalTag (Tiff,TotalTag);
    TamanoDirectorio = TotalTag * TIF_LONGITUDTAG + 4;
    if ( Memoria = Mem_Crea (TamanoDirectorio) )
      {
      if ( Tif_Directorio (Tiff) )  { Mem_Destruye (Tif_Directorio(Tiff)); }
      Tif_PonDirectorio (Tiff, Memoria);
      if ( Fch_LeeOcteto (Tif_Fichero(Tiff),Memoria,TamanoDirectorio) )
        {
        Alto = Tif_Alto (Tiff);
        FilasPorBanda = Tif_FilasPorBanda (Tiff);
        if ( FilasPorBanda )
          { TotalBanda = DivEx(Alto,FilasPorBanda); }
        else
          { TotalBanda = 1; }
        Tif_PonTotalBanda (Tiff, TotalBanda);
        TodoBien = SI;
        }
      }
    }

  return ( TodoBien );
  }
