/*--------------------------------------------------------------------
 * FICHERO:  Vlis.c
 * OBJETIVO: Probar el objeto "Lista"
 * AUTOR:    Pedro Reina
 * FECHA:    V.14.4.1995
 *------------------------------------------------------------------*/

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

#include "Lista.h"
#include "string.h"             /*  strcpy()  strcmp() */

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

void P_Lis_Crea();
void P_Lis_Agrega();
void P_Lis_Anota();
void P_Lis_Ordena();
void P_Lis_Destruye();
int  ComparaCadena();

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

lista L1, L2;

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

  while ( Sigue )
    {
    printf ( "\n\n" );
    printf ( "\nPrueba del objeto Lista" );
    printf ( "\n=======================\n" );

    printf ( "\n0.  Fin del programa" );
    printf ( "\n1.  Lis_Crea()" );
    printf ( "\n2.  Lis_Agrega()" );
    printf ( "\n3.  Lis_Anota()" );
    printf ( "\n4.  Lis_Ordena()" );
    printf ( "\n5.  Lis_Destruye()" );

    printf ( "\n\nIntroduce nmero de opcin: " );
    scanf ( "%d", &Opcion );
    getchar();

    switch ( Opcion )
      {
      case 0:   Sigue = 0;                 break;
      case 1:   P_Lis_Crea();              break;
      case 2:   P_Lis_Agrega();            break;
      case 3:   P_Lis_Anota();             break;
      case 4:   P_Lis_Ordena();            break;
      case 5:   P_Lis_Destruye();          break;
      }
    }
  }

/*--------------------------------------------------------------------
 * Funcin P_Lis_Crea()
 *------------------------------------------------------------------*/
void P_Lis_Crea()
  {
  printf ( "\n\n" );
  printf ( "\nPrueba de Lis_Crea()" );
  printf ( "\n--------------------\n" );

  L1 = Lis_Crea();
  L2 = Lis_Crea();

  printf ( "\nCreadas dos listas." );

  printf ("\n\nPulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Lis_Agrega()
 *------------------------------------------------------------------*/
void P_Lis_Agrega()
  {
  char *Aux;
  lista L;

  printf ( "\n\n" );
  printf ( "\nPrueba de Lis_Agrega()" );
  printf ( "\n----------------------\n" );

  Aux = (char *) Mem_Crea (10);
  strcpy (Aux, "Primera");
  Lis_PonContenido (L1,Aux);
  Aux = (char *) Mem_Crea (10);
  strcpy (Aux, "Primera");
  Lis_PonContenido (L2,Aux);

  Aux = (char *) Mem_Crea (10);
  strcpy (Aux, "Segunda");
  L1 = Lis_Agrega (L1,Aux);
  Aux = (char *) Mem_Crea (10);
  strcpy (Aux, "Segunda");
  Lis_AgregaFin (L2,Aux);

  Aux = (char *) Mem_Crea (10);
  strcpy (Aux, "Tercera");
  L1 = Lis_Agrega (L1,Aux);
  Aux = (char *) Mem_Crea (10);
  strcpy (Aux, "Tercera");
  Lis_AgregaFin (L2,Aux);

  Aux = (char *) Mem_Crea (10);
  strcpy (Aux, "Cuarta");
  L1 = Lis_Agrega (L1,Aux);
  Aux = (char *) Mem_Crea (10);
  strcpy (Aux, "Cuarta");
  Lis_AgregaFin (L2,Aux);

  Aux = (char *) Mem_Crea (10);
  strcpy (Aux, "Quinta");
  L1 = Lis_Agrega (L1,Aux);
  Aux = (char *) Mem_Crea (10);
  strcpy (Aux, "Quinta");
  Lis_AgregaFin (L2,Aux);

  printf ("\nNodos de la primera lista: ");
  for ( L=L1 ; L ; L=Lis_Siguiente(L) )
    { printf ( "\n%s", Lis_Contenido(L) ); }
  printf ("\nTotal: %d", Lis_Total(L1));

  printf ("\n\nNodos de la segunda lista: ");
  for ( L=L2 ; L ; L=Lis_Siguiente(L) )
    { printf ( "\n%s", Lis_Contenido(L) ); }
  printf ("\nTotal: %d", Lis_Total(L2));

  printf ("\n\nPulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Lis_Anota()
 *------------------------------------------------------------------*/
void P_Lis_Anota()
  {
  char *Aux;
  lista L;

  printf ( "\n\n" );
  printf ( "\nPrueba de Lis_Anota()" );
  printf ( "\n---------------------\n" );

  Aux = (char *) Mem_Crea (10);
  strcpy (Aux, "Primera");
  L1 = Lis_Anota (L1,Aux);
  Aux = (char *) Mem_Crea (10);
  strcpy (Aux, "Primera");
  L2 = Lis_AnotaFin (L2,Aux);

  Aux = (char *) Mem_Crea (10);
  strcpy (Aux, "Segunda");
  L1 = Lis_Anota (L1,Aux);
  Aux = (char *) Mem_Crea (10);
  strcpy (Aux, "Segunda");
  L2 = Lis_AnotaFin (L2,Aux);

  Aux = (char *) Mem_Crea (10);
  strcpy (Aux, "Tercera");
  L1 = Lis_Anota (L1,Aux);
  Aux = (char *) Mem_Crea (10);
  strcpy (Aux, "Tercera");
  L2 = Lis_AnotaFin (L2,Aux);

  Aux = (char *) Mem_Crea (10);
  strcpy (Aux, "Cuarta");
  L1 = Lis_Anota (L1,Aux);
  Aux = (char *) Mem_Crea (10);
  strcpy (Aux, "Cuarta");
  L2 = Lis_AnotaFin (L2,Aux);

  Aux = (char *) Mem_Crea (10);
  strcpy (Aux, "Quinta");
  L1 = Lis_Anota (L1,Aux);
  Aux = (char *) Mem_Crea (10);
  strcpy (Aux, "Quinta");
  L2 = Lis_AnotaFin (L2,Aux);

  printf ("\nNodos de la primera lista: ");
  for ( L=L1 ; L ; L=Lis_Siguiente(L) )
    { printf ( "\n%s", Lis_Contenido(L) ); }
  printf ("\nTotal: %d", Lis_Total(L1));

  printf ("\n\nNodos de la segunda lista: ");
  for ( L=L2 ; L ; L=Lis_Siguiente(L) )
    { printf ( "\n%s", Lis_Contenido(L) ); }
  printf ("\nTotal: %d", Lis_Total(L2));

  printf ("\n\nPulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Lis_Ordena()
 *------------------------------------------------------------------*/
void P_Lis_Ordena()
  {
  lista L;

  printf ( "\n\n" );
  printf ( "\nPrueba de Lis_Ordena()" );
  printf ( "\n----------------------\n" );

  L1 = Lis_Ordena (L1,ComparaCadena);
  L2 = Lis_Ordena (L2,ComparaCadena);

  printf ("\nNodos de la primera lista: ");
  for ( L=L1 ; L ; L=Lis_Siguiente(L) )
    { printf ( "\n%s", Lis_Contenido(L) ); }

  printf ("\n\nNodos de la segunda lista: ");
  for ( L=L2 ; L ; L=Lis_Siguiente(L) )
    { printf ( "\n%s", Lis_Contenido(L) ); }

  printf ("\n\nPulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Lis_Destruye()
 *------------------------------------------------------------------*/
void P_Lis_Destruye()
  {
  printf ( "\n\n" );
  printf ( "\nPrueba de Lis_Destruye()" );
  printf ( "\n------------------------\n" );

  Lis_Destruye (L1);
  Lis_Destruye (L2);

  printf ( "\nDestruidas las dos listas" );

  printf ("\n\nPulsa ENTER para seguir: ");
  getchar();
  }
  
/*--------------------------------------------------------------------
 * FUNCION:  ComparaCadena()
 * OBJETIVO: Comparar dos cadenas
 * ENTRADAS: Los punteros a las dos cadenas
 * SALIDAS:  Un int que indica qu cadena es menor
 *------------------------------------------------------------------*/
int ComparaCadena (Cad1,Cad2)
char **Cad1, **Cad2;
  {
  return ( strcmp (*Cad1,*Cad2) );
  } 
  