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

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

#include "Memo.h"

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

/*--------------------------------------------------------------Olimpo
 * FUNCION:  Mmo_Agrega()
 * OBJETIVO: Agregar un registro a un fichero memo
 * ENTRADAS: El objeto memo y la cadena que hay que almacenar
 * SALIDAS:  El nmero de bloque asignado al registro.
 *           Si no se ha podido realizar la operacin se
 *           devuelve 0
 * EJEMPLO:  Mmo_Agrega ( Dato, Anotacion )
 * NOTA:     Los fines de lnea en la cadena se deben indican
 *           con el carcter '\r'
 * ALGORITMO:
 *      Si el modo de apertura es MMO_ACTUALIZACION
 *        Como algunos programas no graban los bloques completos,
 *          Limpiar el bloque en memoria
 *          Leer el ltimo bloque del fichero (quiz incompleto)
 *          Si estaba incompleto
 *            Volverse a colocar al comienzo del ltimo bloque
 *            Grabar el bloque, ya completo
 *        Anotar el nmero de bloque donde se comienza
 *        Escribir el texto
 *------------------------------------------------------------------*/
contador Mmo_Agrega (Memo, Texto)
memo     Memo;
cadena   Texto;
  {
  contador Respuesta, Numero;

  if ( Mmo_ModoApertura(Memo) == MMO_ACTUALIZACION )
    {
    Numero = Mmo_Disponible(Memo) - 1;
    Mmo_Limpia (Memo);
    if ( Mmo_LeeBloque (Memo, Numero) != MMO_TAMANOBLOQUE )
      {
      Fch_Coloca (Mmo_Fichero(Memo), (entero)Numero*MMO_TAMANOBLOQUE);
      Fch_EscribeOcteto (Mmo_Fichero(Memo), 
                         Mmo_Dato(Memo), MMO_TAMANOBLOQUE);
      }
    
    Mmo_Limpia (Memo);
    Numero++;
    Mmo_PonNumeroBloque (Memo, Numero);
    if ( Mmo_EscribeTexto (Memo, Texto) )
      { Respuesta = Numero; }
    else
      { Respuesta = 0; }
    }

  else  /* Abierto en modo MMO_LECTURA */
    { Respuesta = 0; }
    
  return ( Respuesta );
  }