/*--------------------------------------------------------------------
 * FICHERO:  MmoCreOb.c
 * OBJETIVO: Definir las funciones Mmo_CreaObjeto(), Mmo_Cierra() y
 *           Mmo_Destruye()
 * AUTOR:    Pedro Reina
 * FECHA:    S.17.6.1995
 *------------------------------------------------------------------*/

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

#include "Memo.h"

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

/*--------------------------------------------------------------------
 * FUNCION:  Mmo_CreaObjeto()
 * OBJETIVO: Crear un objeto "memo" y darle valores iniciales
 * ENTRADAS: Ninguna
 * SALIDAS:  El objeto memo o NIL si no se puede crear
 * EJEMPLO:  Mmo_CreaObjeto ()
 *------------------------------------------------------------------*/
memo Mmo_CreaObjeto()
  {
  memo Nuevo;

  if ( Nuevo = (memo) (Mem_Crea (sizeof(Mmo_st))) )
    { Mem_Asigna (Nuevo,0,sizeof(Mmo_st)); } /* Puesta a cero de todo */

  return ( Nuevo );
  }

/*--------------------------------------------------------------Olimpo
 * FUNCION:  Mmo_Cierra()
 * OBJETIVO: Cerrar un fichero memo
 * ENTRADAS: El objeto memo
 * SALIDAS:  Ninguna
 * EJEMPLO:  Mmo_Cierra ( Nota )
 * ALGORITMO:
 *      Si se ha abierto en modo de actualizacin y ha sido modificado
 *         Grabar el nmero de bloque disponible
 *      Cerrar el fichero asociado al objeto
 *      Destruirlo
 *------------------------------------------------------------------*/
void Mmo_Cierra (Memo)
memo Memo;
  {
  octeto Aux[4];
  
  if ( Mmo_ModoApertura(Memo) == MMO_ACTUALIZACION  &&
       Mmo_Modificado(Memo) )
    {
    Fch_Coloca (Mmo_Fichero(Memo),0);
    Mem_EscribeEntero (Aux, MEM_INTEL, (entero)Mmo_Disponible(Memo));
    Fch_EscribeOcteto (Mmo_Fichero(Memo), Aux, 4);
    }

  Fch_Cierra ( Mmo_Fichero(Memo) );
  Mmo_Destruye (Memo);
  }

/*--------------------------------------------------------------------
 * FUNCION:  Mmo_Destruye()
 * OBJETIVO: Destruir un objeto memo, liberando su memoria
 * ENTRADAS: El objeto memo
 * SALIDAS:  Ninguna
 * EJEMPLO:  Mmo_Destruye ( Nota )
 * ALGORITMO:
 *      Si se ha reservado memoria para Dato, liberarla
 *      Liberar la memoria del objeto memo
 *------------------------------------------------------------------*/
void Mmo_Destruye ( Memo )
memo Memo;
  {
  if ( Mmo_Dato(Memo) )
    { Mem_Destruye (Mmo_Dato(Memo)); }

  Mem_Destruye (Memo);
  }