/*--------------------------------------------------------------------
 * FICHERO:       Fecha.h
 * OBJETIVO:      Definir el objeto "Fecha"
 * IDENTIFICADOR: Fec
 * AUTOR:         Pedro Reina
 * FECHA:         V.14.7.1995
 * OBJETOS UTILIZADOS: Memoria, Tiempo, Cadena
 *------------------------------------------------------------------*/

/*--------------------------------------------------------------------
 * Funciones pblicas
 *
 *   Fec_Crea()            FecCrea.c
 *   Fec_Destruye()        Fecha.h
 *   Fec_Ano()             Fecha.h
 *   Fec_Mes()             Fecha.h
 *   Fec_Dia()             Fecha.h
 *   Fec_DiaSemana()       FecDiaSe.c
 *   Fec_Diferencia()      Fecha.h
 *   Fec_Hoy()             Fecha.h
 *   Fec_Cadena()          FecCaden.c
 *   Fec_LeeCadena()       FecLeeCa.c
 *------------------------------------------------------------------*/

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

/*--------------------------------------------------------------------
 * Funciones privadas
 *
 *   Fec_PonAno()          Fecha.h
 *   Fec_PonMes()          Fecha.h
 *   Fec_PonDia()          Fecha.h
 *   Fec_Factor()          FecFact.c
 *------------------------------------------------------------------*/

#ifndef _FECHA_
#define _FECHA_

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

#include "Memoria.h"
#include "Tiempo.h"
#include "Cadena.h"

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

   /* Ninguna */

/*--------------------------------------------------------------------
 * Definicin del tipo "fecha"
 *------------------------------------------------------------------*/
typedef struct {
               contador Ano;
               octeto   Mes;
               octeto   Dia;
               } Fec_st, *fecha;

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

fecha  Fec_Crea();
entero Fec_Factor();
octeto Fec_DiaSemana();
cadena Fec_Cadena();
fecha  Fec_LeeCadena();

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

/*--------------------------------------------------------------Olimpo
 * MACRO:    Fec_Ano()
 * OBJETIVO: Decir el ao de una fecha
 * ENTRADAS: La fecha
 * SALIDAS:  El ao
 * EJEMPLO:  Fec_Ano ( Nacimiento )
 *------------------------------------------------------------------*/
#define Fec_Ano(f)  ((f)->Ano)

/*--------------------------------------------------------------------
 * MACRO:    Fec_PonAno()
 * OBJETIVO: Poner el ao en una fecha
 * ENTRADAS: La fecha y el ao
 * SALIDAS:  El ao
 * EJEMPLO:  Fec_PonAno ( Nacimiento, 1960 )
 *------------------------------------------------------------------*/
#define Fec_PonAno(f,a)  (((f)->Ano)=(a))

/*--------------------------------------------------------------Olimpo
 * MACRO:    Fec_Mes()
 * OBJETIVO: Decir el mes de una fecha
 * ENTRADAS: La fecha
 * SALIDAS:  El mes
 * EJEMPLO:  Fec_Mes ( Nacimiento )
 *------------------------------------------------------------------*/
#define Fec_Mes(f)  ((f)->Mes)

/*--------------------------------------------------------------------
 * MACRO:    Fec_PonMes()
 * OBJETIVO: Poner el mes en una fecha
 * ENTRADAS: La fecha y el mes
 * SALIDAS:  El mes
 * EJEMPLO:  Fec_PonMes ( Nacimiento, 10 )
 *------------------------------------------------------------------*/
#define Fec_PonMes(f,m)  (((f)->Mes)=(m))

/*--------------------------------------------------------------Olimpo
 * MACRO:    Fec_Dia()
 * OBJETIVO: Decir el da de una fecha
 * ENTRADAS: La fecha
 * SALIDAS:  El da
 * EJEMPLO:  Fec_Dia ( Nacimiento )
 *------------------------------------------------------------------*/
#define Fec_Dia(f)  ((f)->Dia)

/*--------------------------------------------------------------------
 * MACRO:    Fec_PonDia()
 * OBJETIVO: Poner el da en una fecha
 * ENTRADAS: La fecha y el da
 * SALIDAS:  El da
 * EJEMPLO:  Fec_PonDia ( Nacimiento, 25 )
 *------------------------------------------------------------------*/
#define Fec_PonDia(f,d)  (((f)->Dia)=(d))

/*--------------------------------------------------------------Olimpo
 * MACRO:    Fec_Destruye()
 * OBJETIVO: Destruir una fecha, liberando su memoria
 * ENTRADAS: La fecha
 * SALIDAS:  Ninguna
 * EJEMPLO:  Fec_Destruye ( Nacimiento )
 *------------------------------------------------------------------*/
#define Fec_Destruye(f)  Mem_Destruye(f)

/*--------------------------------------------------------------Olimpo
 * MACRO:    Fec_Diferencia()
 * OBJETIVO: Calcular la diferencia en das entre dos fechas
 * ENTRADAS: Dos fechas
 * SALIDAS:  El nmero de das que hay desde la primera hasta
 *           la segunda
 * EJEMPLO:  Fec_Diferencia ( Nacimiento, Hoy )
 *------------------------------------------------------------------*/
#define Fec_Diferencia(f1,f2)  (Fec_Factor(f2)-Fec_Factor(f1))

/*--------------------------------------------------------------Olimpo
 * MACRO:    Fec_Hoy()
 * OBJETIVO: Devolver una fecha con el da del reloj 
 *           del ordenador
 * ENTRADAS: Ninguna
 * SALIDAS:  Una fecha
 * NOTA:     La fecha hay que destruirla cuando no sea necesaria
 * EJEMPLO:  Fec_Hoy()
 *------------------------------------------------------------------*/
#define Fec_Hoy()  Fec_Crea(Tim_Ano(),Tim_Mes(),Tim_Dia())


#endif /* _FECHA_ */