/*--------------------------------------------------------------------
 * FICHERO:  DbnCrea.c
 * OBJETIVO: Definir las funciones Dbn_Crea() y Dbn_Destruye()
 * AUTOR:    Pedro Reina
 * FECHA:    S.1.7.1995
 *------------------------------------------------------------------*/

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

#include "Diblane.h"

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

/*--------------------------------------------------------------Olimpo
 * FUNCION:  Dbn_Crea()
 * OBJETIVO: Crear un objeto "diblane" y darle valores iniciales
 * ENTRADAS: El ancho y el alto requeridos
 * SALIDAS:  Un diblane o NIL si no se puede crear
 * EJEMPLO:  Dbn_Crea (80,30)
 *------------------------------------------------------------------*/
diblane Dbn_Crea (Ancho, Alto)
entero Ancho, Alto;
  {
  diblane Nuevo;
  memoria Memoria;

  if ( Nuevo = (diblane) (Mem_Crea (sizeof(Dbn_st))) )
    {
    Mem_Asigna (Nuevo, 0, sizeof(Dbn_st));  /* Puesta a cero de todo */

    Dbn_PonAncho (Nuevo, Ancho);
    Dbn_PonAlto (Nuevo, Alto);
    Dbn_PonAnchoEnOxel (Nuevo, (Ancho+7)/8);
    Dbn_PonTamano (Nuevo, Dbn_AnchoEnOxel(Nuevo) * Alto);

    if ( Memoria = Mem_Crea (Dbn_Tamano(Nuevo)) )
      { 
      Dbn_PonDato (Nuevo, Memoria); 
      Mem_Asigna (Memoria, 0, Dbn_Tamano(Nuevo));
      }
    else
      {
      Dbn_Destruye (Nuevo);
      Nuevo = NIL;
      }
    }

  else { Nuevo = NIL; }

  return ( Nuevo );
  }

/*--------------------------------------------------------------Olimpo
 * FUNCION:  Dbn_Destruye()
 * OBJETIVO: Destruir un objeto diblane, liberando su memoria
 * ENTRADAS: El diblane
 * SALIDAS:  Ninguna
 * EJEMPLO:  Dbn_Destruye ( Dibujo )
 * ALGORITMO:
 *      Si se ha reservado memoria para Dato, liberarla
 *      Liberar la memoria del objeto diblane
 *------------------------------------------------------------------*/
void Dbn_Destruye ( Dibujo )
diblane Dibujo;
  {
  if ( Dbn_Dato (Dibujo) )  { Mem_Destruye (Dbn_Dato(Dibujo)); }
  Mem_Destruye (Dibujo);
  }
