/*--------------------------------------------------------------------
 * FICHERO:  LisOrden.c
 * OBJETIVO: Definir la funcin Lis_Ordena()
 * AUTOR:    Pedro Reina
 * FECHA:    J.13.7.1995
 *------------------------------------------------------------------*/

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

#include "Lista.h"

#include <stdlib.h>      /*  qsort()  */

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

/*--------------------------------------------------------------Olimpo
 * FUNCION:  Lis_Ordena()
 * OBJETIVO: Ordenar los nodos de una lista segn el 
 *           criterio indicado
 * ENTRADAS: Una lista y la funcin de comparacin entre
 *           dos contenidos
 * SALIDAS:  La lista se modifica y se devuelve
 * EJEMPLO:  Lis_Ordena ( Lista, FuncionComparacion )
 *------------------------------------------------------------------*/
lista Lis_Ordena (Lista, Compara)
lista Lista;
int   Compara();
  {
  char  **Vector;
  lista   L;
  entero  i, Total;
  
  Total = Lis_Total (Lista);
  Vector = (char **) Mem_Crea (Total * sizeof(char *));
  
  for ( L=Lista , i=0 ; L ; L=Lis_Siguiente(L) , i++ )
    { Vector[i] = Lis_Contenido (L); }
    
  qsort ((void *)Vector, Total, sizeof(Vector[0]), Compara);
  
  for ( L=Lista , i=0 ; L ; L=Lis_Siguiente(L) , i++ )
    { Lis_PonContenido (L,Vector[i]); }
  
  Mem_Destruye (Vector);
  return ( Lista );
  }