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

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

#include "Memo.h"

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

/*--------------------------------------------------------------Olimpo
 * FUNCION:  Mmo_Crea()
 * OBJETIVO: Crear un fichero memo y obtener un objeto en
 *           memoria para manejarlo
 * ENTRADAS: El nombre completo del fichero que hay que crear y
 *           el nombre interno
 * SALIDAS:  Un objeto memo o NIL si no se puede crear
 * EJEMPLO:  Mmo_Crea ("Agenda.dbt", "Agenda")
 * NOTA:     El nombre interno debe tener ocho caracteres
 *           como mximo
 * ALGORITMO:
 *      Pedir un objeto memo
 *      Pedir memoria para Dato y anotarla
 *      Anotar Modificado, Disponible, ModoApertura y Tamao de bloque
 *      Abrir el nuevo fichero y anotarlo
 *      Rellenar el bloque de cabecera y grabarlo en el fichero
 *------------------------------------------------------------------*/
memo Mmo_Crea (NombreFichero, Nombre)
cadena   NombreFichero, Nombre;
  {
  memo     Nuevo;             
  logico   Error = NO;
  memoria  Dato;
  octeto   i;
  fichero  Fichero;

  if ( Nuevo = Mmo_CreaObjeto() )
    {
    Dato = Mem_Crea (MMO_TAMANOBLOQUE);
    if ( !Dato )  { Error = SI; }
    else
      {
      Mem_Asigna (Dato, 0, MMO_TAMANOBLOQUE);
      Mmo_PonDato (Nuevo, Dato);
      Mmo_PonModificado (Nuevo, SI);
      Mmo_PonDisponible (Nuevo, 1);
      Mmo_PonModoApertura (Nuevo, MMO_ACTUALIZACION);
      if ( Fichero = Fch_AbreGrabar (NombreFichero,FCH_BINARIO) )
        {
        Mmo_PonFichero (Nuevo, Fichero);
        Mmo_Dato(Nuevo)[0]  = 0x01;
        Mmo_Dato(Nuevo)[18] = 0x02;
        Mmo_Dato(Nuevo)[19] = 0x01;
        Mmo_Dato(Nuevo)[21] = 0x02;
        for ( i=0 ; i<8 && Nombre[i] ; i++ )
          { Mmo_Dato(Nuevo)[8+i] = Nombre[i]; }
        Fch_EscribeOcteto (Fichero, Mmo_Dato(Nuevo), MMO_TAMANOBLOQUE);
        }
      else
        { Error = SI; }
      }
    }

  if ( Error )
    {
    Mmo_Destruye (Nuevo);
    Nuevo = NIL;
    }

  return ( Nuevo );
  }