/*--------------------------------------------------------------------
 * FICHERO:       Lista.h
 * OBJETIVO:      Definir el objeto "Lista"
 * IDENTIFICADOR: Lis
 * AUTOR:         Pedro Reina
 * FECHA:         J.13.7.1995
 * OBJETOS UTILIZADOS: Memoria
 *------------------------------------------------------------------*/

/*--------------------------------------------------------------------
 * Funciones pblicas
 *
 *   Lis_Contenido()         Lista.h
 *   Lis_PonContenido()      Lista.h
 *   Lis_Siguiente()         Lista.h
 *   Lis_PonSiguiente()      Lista.h
 *   Lis_Crea()              LisCrea.c
 *   Lis_Destruye()          LisDestr.c
 *   Lis_Agrega()            LisAgreg.c
 *   Lis_AgregaFin()         LisAgFin.c
 *   Lis_Anota()             LisAnota.c
 *   Lis_AnotaFin()          LisAnFin.c
 *   Lis_Total()             LisTotal.c
 *   Lis_Ordena()            LisOrden.c
 *------------------------------------------------------------------*/

/*--------------------------------------------------------------------
 * Funciones conocidas
 *
 *   Ninguna
 *------------------------------------------------------------------*/

/*--------------------------------------------------------------------
 * Funciones privadas
 *
 *   Ninguna
 *------------------------------------------------------------------*/

#ifndef _LISTA_
#define _LISTA_

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

#include "General.h"
#include "Memoria.h"

/*--------------------------------------------------------------------
 * Definicin de macros constantes
 *------------------------------------------------------------------*/

    /* Ninguno */

/*--------------------------------------------------------------------
 * Definicin del tipo lista
 *------------------------------------------------------------------*/

typedef struct Lis_ST {
                      memoria        Contenido;
                      struct Lis_ST *Siguiente;
                      } Lis_st, *lista;

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

   /* Ninguna */

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

lista  Lis_Crea();
lista  Lis_Agrega();
lista  Lis_AgregaFin();
lista  Lis_Anota();
lista  Lis_AnotaFin();
lista  Lis_Ordena();
entero Lis_Total();
void   Lis_Destruye();

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

/*--------------------------------------------------------------Olimpo
 * MACRO:    Lis_Contenido()
 * OBJETIVO: Dar el contenido de un elemento de una lista
 * ENTRADAS: Una lista
 * SALIDAS:  El contenido del primer elemento
 * EJEMPLO:  Lis_Contenido (Agenda)
 *------------------------------------------------------------------*/
#define Lis_Contenido(L)  ( (L) -> Contenido )

/*--------------------------------------------------------------Olimpo
 * MACRO:    Lis_PonContenido()
 * OBJETIVO: Poner el contenido de un elemento de una lista
 * ENTRADAS: Una lista y el contenido que se va a poner, que
 *           debe ser una direccin de memoria reservada
 * SALIDAS:  El contenido
 * EJEMPLO:  Lis_PonContenido (Agenda,Nombre)
 *------------------------------------------------------------------*/
#define Lis_PonContenido(L,C)  ( (L)->Contenido = (memoria)(C) )

/*--------------------------------------------------------------Olimpo
 * MACRO:    Lis_Siguiente()
 * OBJETIVO: Dar el siguiente elemento de una lista
 * ENTRADAS: Una lista
 * SALIDAS:  Otra lista, que comienza en el siguiente
 *           elemento de la lista original
 * EJEMPLO:  Lis_Siguiente (Agenda)
 *------------------------------------------------------------------*/
#define Lis_Siguiente(L)  ( (L) -> Siguiente )

/*--------------------------------------------------------------Olimpo
 * MACRO:    Lis_PonSiguiente()
 * OBJETIVO: Poner el siguiente elemento de una lista
 * ENTRADAS: Una lista y la lista que se va a poner 
 *           como siguiente
 * SALIDAS:  La lista siguiente
 * EJEMPLO:  Lis_PonSiguiente (Agenda,Nuevo)
 *------------------------------------------------------------------*/
#define Lis_PonSiguiente(L,S)  ( (L)->Siguiente = (S) )

#endif /* _LISTA_ */