/*--------------------------------------------------------------------
 * FICHERO:  TifAbre.c
 * OBJETIVO: Definir la funcin Tif_Abre()
 * AUTOR:    Pedro Reina
 * FECHA:    J.27.7.1995
 *------------------------------------------------------------------*/

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

#include "Tiff.h"

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

/*--------------------------------------------------------------Olimpo
 * FUNCION:  Tif_Abre()
 * OBJETIVO: Abrir un fichero TIFF y obtener un objeto
 *           en memoria para manejarlo
 * ENTRADAS: El nombre completo del fichero que hay que abrir
 * SALIDAS:  Un tiff o NIL si se produce algn error
 * EJEMPLO:  Tif_Abre ("Imagen.tif")
 * ALGORITMO:
 *      Pedir un objeto tiff
 *      Abrir el fichero
 *------------------------------------------------------------------*/
tiff Tif_Abre (Nombre)
cadena Nombre;
  {
  tiff     Nuevo;
  logico   ErrorFormato = NO, ErrorMemoria = NO, ErrorFichero = NO;
  octeto   Cabecera[TIF_CABECERA];
  fichero  Fichero;
  cadena   Mensaje;
  entero   PrimerDirectorio;

  if ( Nuevo = Tif_CreaObjeto() )
    {
    if ( Fichero = Fch_AbreLeer (Nombre,FCH_BINARIO) )
      {
      Tif_PonFichero (Nuevo, Fichero);
      if ( Fch_LeeOcteto(Fichero, Cabecera, TIF_CABECERA) )
        {
        if ( Cabecera[0] == 'M' &&
             Cabecera[1] == 'M' &&
             Cabecera[2] ==  0  &&
             Cabecera[3] == '*' )
          { Tif_PonFormato (Nuevo,TIF_MOTOROLA); }

        else if ( Cabecera[0] == 'I' &&
                  Cabecera[1] == 'I' &&
                  Cabecera[2] == '*' &&
                  Cabecera[3] ==  0  )
          { Tif_PonFormato (Nuevo,TIF_INTEL); }
          
        else  { ErrorFormato = SI; }

        if ( !ErrorFormato )
          {

          if ( Tif_Formato (Nuevo) == TIF_MOTOROLA )
            { PrimerDirectorio = Mem_LeeEntero (Cabecera+4,MEM_MOTOROLA); }

          if ( Tif_Formato (Nuevo) == TIF_INTEL )
            { PrimerDirectorio = Mem_LeeEntero (Cabecera+4,MEM_INTEL); }
            
          if ( !Tif_LeeDirectorio (Nuevo, PrimerDirectorio) )
            { ErrorMemoria = SI; }

          } /* Fin if !ErrorFormato */
        }
      else { ErrorFormato = SI; }
      }
    else { ErrorFichero = SI; }
    }
  else { ErrorMemoria = SI; }

  if ( ErrorMemoria )
    { Usr_Avisa ("Falta memoria para abrir el fichero TIFF"); }

  if ( ErrorFormato )
    {
    Mensaje = Cad_Une ("El fichero \"",Nombre,"\" no tiene formato TIFF",
                       CAD_FIN);
    Usr_Avisa (Mensaje);
    Cad_Destruye (Mensaje);
    }

  if ( ErrorMemoria || ErrorFormato || ErrorFichero )
    {
    Tif_Destruye (Nuevo);
    Nuevo = NIL;
    }

  return ( Nuevo );
  }
