/*--------------------------------------------------------------------
 * FICHERO:  TifEsBBN.c
 * OBJETIVO: Definir la funcin Tif_EscribeBandaBN()
 * AUTOR:    Pedro Reina
 * FECHA:    V.14.7.1995
 *------------------------------------------------------------------*/

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

#include "Tiff.h"

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

/*--------------------------------------------------------------Olimpo
 * FUNCION:  Tif_EscribeBandaBN()
 * OBJETIVO: Escribir los datos que realmente expresan una banda
 *           de una imagen en blanco y negro
 * ENTRADAS: Un objeto tiff, el tamao en octetos de la banda,
 *           el nmero de la banda y la direccin en que se
 *           encuentran los datos
 * SALIDAS:  Lgica, que indica que todo ha ido bien
 * EJEMPLO:  Tif_EscribeBandaBN ( Imagen, 4096, 2, Aux )
 * NOTAS:    1. Se asume que la banda existe
 *           2. Las bandas se empiezan a numerar en 0
 *           3. Si la imagen slo tiene una banda, esta funcin
 *              escribe la nica banda, aunque se pida otra
 *------------------------------------------------------------------*/
logico Tif_EscribeBandaBN (Tiff, Tamano, Banda, Dato)
tiff     Tiff;
entero   Tamano;
contador Banda;
memoria  Dato;
  {
  logico Respuesta = NO;
  entero Pos;
  octeto Aux[4];

  if ( Tif_MetodoCompr(Tiff) == TIF_SIN_COMPRESION )
    {
    if ( Tif_TotalBanda(Tiff) == 1 )
      {
      Fch_ColocaFinal (Tif_Fichero(Tiff));
      Respuesta = Fch_EscribeOcteto (Tif_Fichero(Tiff), Dato, Tamano);
      }

    else
      {
      Mem_EscribeEntero (Aux, MEM_INTEL, Tamano);
      Pos = Tif_ComienzoDir(Tiff) + 6 + TIF_LONGITUDTAG * Tif_TotalTag(Tiff) +
            4 * Tif_TotalBanda(Tiff) + 4 * Banda;
      Fch_Coloca (Tif_Fichero(Tiff), Pos);
      Respuesta = Fch_EscribeOcteto (Tif_Fichero(Tiff), Aux, 4);

      if ( Respuesta && (Fch_ColocaFinal (Tif_Fichero(Tiff)) != -1) )
        {
        Pos = Fch_Posicion (Tif_Fichero(Tiff));
        Mem_EscribeEntero (Aux, MEM_INTEL, Pos);
        Pos = Tif_ComienzoDir(Tiff) + 6 +
              TIF_LONGITUDTAG * Tif_TotalTag(Tiff) + 4 * Banda;
        Fch_Coloca (Tif_Fichero(Tiff), Pos);
        Respuesta = Fch_EscribeOcteto (Tif_Fichero(Tiff), Aux, 4);
        }
      else  { Respuesta = NO; }

      if ( Respuesta )
        {
        Fch_ColocaFinal (Tif_Fichero(Tiff));
        Respuesta = Fch_EscribeOcteto (Tif_Fichero(Tiff), Dato, Tamano);
        }
      }
    }

  return ( Respuesta );
  }
