/*--------------------------------------------------------------------
 * FICHERO:  Vdbn.c
 * OBJETIVO: Probar el objeto Diblane
 * AUTOR:    Pedro Reina
 * FECHA:    S.5.8.1995
 *------------------------------------------------------------------*/

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

#include "Diblane.h"

/*--------------------------------------------------------------------
 * Variables globales
 *------------------------------------------------------------------*/

diblane Diblane;

/*--------------------------------------------------------------------
 * Declaracin de funciones
 *------------------------------------------------------------------*/

void P_Dbn_Crea();
void P_Dbn_Destruye();
void P_Dbn_Coloca();
void P_Dbn_Muestra();
void P_Dbn_Invierte();
void P_Dbn_ReflejaHorizontal();
void P_Dbn_ReflejaVertical();
void P_Dbn_Edita();

/*--------------------------------------------------------------------
 * Programa principal
 *------------------------------------------------------------------*/
void main()
  {
  int Opcion, Sigue=1;
  contador Fil, Col;

  Pan_Define (PAN_GRAFICO);
  Son_Enciende();
  while ( Sigue )
    {
    Pan_Limpia();
    Pan_Color (NEGRO,BLANCO);
    Fil = 0, Col = 3;
    Pan_PonTexto (Fil++,Col,"Prueba del objeto Diblane" );
    Pan_PonTexto (Fil++,Col,"=========================" );
    Fil++;
    Pan_PonTexto (Fil++,Col,"0. Fin del programa" );
    Pan_PonTexto (Fil++,Col,"1. Paso a grfico" );
    Pan_PonTexto (Fil++,Col,"2. Paso a texto" );
    Pan_PonTexto (Fil++,Col,"3. Dbn_Crea()" );
    Pan_PonTexto (Fil++,Col,"4. Dbn_Destruye()" );
    Pan_PonTexto (Fil++,Col,"5. Dbn_Coloca()" );
    Pan_PonTexto (Fil++,Col,"6. Dbn_Muestra()" );
    Pan_PonTexto (Fil++,Col,"7. Dbn_Invierte()" );
    Pan_PonTexto (Fil++,Col,"8. Dbn_ReflejaHorizontal()" );
    Pan_PonTexto (Fil++,Col,"9. Dbn_ReflejaVertical()" );
    Col--;
    Pan_PonTexto (Fil++,Col,"10. Dbn_Edita()" );
    Fil++;
    Pan_PonTexto (Fil++,Col,"Introduce nmero de opcin: " );
    scanf ( "%d", &Opcion );
    getchar();

    switch ( Opcion )
      {
      case 0:   Sigue = 0;               break;
      case 1:   Pan_Cierra();
                Pan_Define (PAN_GRAFICO);
                break;
      case 2:   Pan_Cierra();
                Pan_Define (PAN_TEXTO);
                break;
      case 3:   P_Dbn_Crea();               break;
      case 4:   P_Dbn_Destruye();           break;
      case 5:   P_Dbn_Coloca();             break;
      case 6:   P_Dbn_Muestra();            break;
      case 7:   P_Dbn_Invierte();           break;
      case 8:   P_Dbn_ReflejaHorizontal();  break;
      case 9:   P_Dbn_ReflejaVertical();    break;
      case 10:  P_Dbn_Edita();              break;
      }
    }
  Pan_Cierra();
  }

/*--------------------------------------------------------------------
 * Funcin P_Dbn_Crea()
 *------------------------------------------------------------------*/
void P_Dbn_Crea()
  {
  entero i, j;

  Pan_Limpia();
  Pan_Color (NEGRO,BLANCO);
  Pan_PonTexto (0,0,"Prueba de Dbn_Crea()");

  if ( Diblane )  { Pan_PonTexto (2,0,"Ya est creado"); }
  else
    {
    if ( Diblane = Dbn_Crea ((entero)170,(entero)120) )
      {
      for ( i=0 ; i<170 ; i++ )
        {
        Dbn_PonPunto (Diblane,   0L, i, 1);
        Dbn_PonPunto (Diblane,   1L, i, 1);
        Dbn_PonPunto (Diblane, 118L, i, 1);
        Dbn_PonPunto (Diblane, 119L, i, 1);
        }
      for ( i=0 ; i<120 ; i++ )
        {
        Dbn_PonPunto (Diblane, i,   0L, 1);
        Dbn_PonPunto (Diblane, i,   1L, 1);
        Dbn_PonPunto (Diblane, i, 168L, 1);
        Dbn_PonPunto (Diblane, i, 169L, 1);
        }
      for ( i=5 ; i<20 ; i++ )
        {
        for ( j=7 ; j<15 ; j++ )
          { Dbn_PonPunto (Diblane, i, j, 1); }
        }

      Pan_PonTexto (2,2,"Ancho: ");
      Pan_Entero (Dbn_Ancho (Diblane),1);
      Pan_PonTexto (4,2,"Ancho en oxel: ");
      Pan_Entero (Dbn_AnchoEnOxel (Diblane),1);
      Pan_PonTexto (6,2,"Alto: ");
      Pan_Entero (Dbn_Alto (Diblane),1);
      }
    else  { Pan_PonTexto (2,0,"No hay memoria"); }
    }

  Pan_PonTexto (23,0,"Pulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Dbn_Destruye()
 *------------------------------------------------------------------*/
void P_Dbn_Destruye()
  {
  contador i, j;

  Pan_Limpia();
  Pan_Color (NEGRO,BLANCO);
  Pan_PonTexto (0,0,"Prueba de Dbn_Destruye()");

  if ( !Diblane )  { Pan_PonTexto (2,0,"Ya est destruido"); }
  else
    {
    Dbn_Destruye (Diblane);
    Diblane = NIL;
    }

  Pan_PonTexto (23,0,"Pulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Dbn_Coloca()
 *------------------------------------------------------------------*/
void P_Dbn_Coloca()
  {
  zona Zona;

  Pan_Limpia();
  Pan_Color (NEGRO,BLANCO);
  Pan_PonTexto (0,0,"Prueba de Dbn_Coloca()");

  if ( Zona = Zon_Crea (2,2,20,77) )
    {
    Zon_Borra (Zona, NEGRO);
    Dbn_Coloca (Diblane, Zona,  1,  5, BLANCO, ROJO);
    Dbn_Coloca (Diblane, Zona, 40, 15, VERDE, BLANCO);
    Dbn_Coloca (Diblane, Zona,
                Zon_AnchoEnOxel(Zona)-5, Zon_AltoFisico(Zona)-30,
                ROJO, BLANCO);
    Zon_Destruye (Zona);
    }

  else
    { Pan_PonTexto (2,2,"No se puede crear zona"); }

  Pan_PonTexto (21,0,"Pulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Dbn_Muestra()
 *------------------------------------------------------------------*/
void P_Dbn_Muestra()
  {
  zona Zona;

  Pan_Limpia();
  Pan_Color (NEGRO,BLANCO);
  Pan_PonTexto (0,0,"Prueba de Dbn_Muestra()");

  if ( Zona = Zon_Crea (2,2,6,20) )
    {
    Dbn_Muestra (Diblane, Zona);
    Zon_Destruye (Zona);
    }

  else
    { Pan_PonTexto (2,2,"No se puede crear zona"); }

  Pan_Color (NEGRO,BLANCO);
  Pan_PonTexto (21,0,"Pulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Dbn_Invierte()
 *------------------------------------------------------------------*/
void P_Dbn_Invierte()
  {
  Pan_Limpia();
  Pan_Color (NEGRO,BLANCO);
  Pan_PonTexto (0,0,"Prueba de Dbn_Invierte()");

  Dbn_Invierte (Diblane);

  Pan_Color (NEGRO,BLANCO);
  Pan_PonTexto (23,0,"Pulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Dbn_ReflejaHorizontal()
 *------------------------------------------------------------------*/
void P_Dbn_ReflejaHorizontal()
  {
  Pan_Limpia();
  Pan_Color (NEGRO,BLANCO);
  Pan_PonTexto (0,0,"Prueba de Dbn_ReflejaHorizontal()");

  Dbn_ReflejaHorizontal (Diblane);

  Pan_Color (NEGRO,BLANCO);
  Pan_PonTexto (23,0,"Pulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Dbn_ReflejaVertical()
 *------------------------------------------------------------------*/
void P_Dbn_ReflejaVertical()
  {
  Pan_Limpia();
  Pan_Color (NEGRO,BLANCO);
  Pan_PonTexto (0,0,"Prueba de Dbn_ReflejaVertical()");

  Dbn_ReflejaVertical (Diblane);

  Pan_Color (NEGRO,BLANCO);
  Pan_PonTexto (23,0,"Pulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Dbn_Edita()
 *------------------------------------------------------------------*/
void P_Dbn_Edita()
  {
  diblane Pequeno;
  zona    Zona;
  entero  i;
  logico  Respuesta;

  Pan_Limpia();
  Pan_Color (NEGRO,BLANCO);
  Pan_PonTexto (0,0,"Prueba de Dbn_Edita()");

  Pequeno = Dbn_Crea ((entero)15, (entero)11);
  Zona = Zon_Crea (3,20,19,60);

  if ( Pequeno && Zona )
    {
    for ( i=0 ; i<11 ; i++ )
      {
      Dbn_PonPunto (Pequeno, i, (entero) 0, 1);
      Dbn_PonPunto (Pequeno, i, (entero)14, 1);
      }
    for ( i=0 ; i<15 ; i++ )
      {
      Dbn_PonPunto (Pequeno, (entero) 0, i, 1);
      Dbn_PonPunto (Pequeno, (entero)10, i, 1);
      }
    Respuesta = Dbn_Edita (Pequeno, Zona);
    Pan_Color (NEGRO,BLANCO);
    Pan_PonEntero (21,4,Respuesta,1);
    }

  if ( Pequeno )  { Dbn_Destruye (Pequeno); }
  if ( Zona )  { Zon_Destruye (Zona); }

  Pan_Color (NEGRO,BLANCO);
  Pan_PonTexto (23,0,"Pulsa ENTER para seguir: ");
  getchar();
  }
