HERM/HERM_GST.CPP
2021-09-12 20:06:36 +02:00

2650 lines
93 KiB
C++
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*************************************************************************\
|* *|
|* HERM_GST *|
|* *|
|* Descripci¢n: *|
|* M¢dulo encargado de gestionar la base de datos de hnos. *|
|* el puntero a la estructura definida. *|
|* *|
|* Fecha: 21-07-96 14.34 / 18.00 *|
|* 23.13 / 00.30 *|
\*************************************************************************/
#include <stdlib.h>
#include <conio.h>
#include <alloc.h>
#include <string.h>
#include <graphics.h>
#include "..\libs\make_bot\make_bot.h"
#include "..\libs\bdatos\bdatos.hh"
#include "Herm.h"
#define ULTIMO_ITEM 26
#define INICIO_ITEM 6
#define INIcristo 0
#define INIvirgen 20
#define HACIA_ATRAS -1
#define DESDE_EL_PRINCIPIO 0
#define HACIA_ADELANTE 1
extern int far Espera_TeclaRaton(void);
struct date FechaActual;
char FICHA_REGISTRO;
BDatos BHerm;
HermStruct SHerm, BHtmp, BHtmp2;
BDatos BHBorrados;
HERMBORRADOS HermanosBorrados;
extern CONFIG Config;
extern BDatos BConfig;
int EditComentario(void);
void Error(char *cError);
void MuestraDatos(void);
void PapeletaDeSitio(void);
void MuestraFotografia(void);
void IncluirBorrado( int NHno );
void BuscaItem( char TipoBusqueda );
void InsertaEnOrden(char HnoHna);
char EscogeInsignia( int CtoVirgen );
void ImprimePapeleta(long CuotaSalida);
void PreparaNuevoRegistro(int HnoHna);
void MarcaItem( int NItem, char como );
int ComparacionParcial( HermStruct A );
int BuscaConfirmaHermanoBajo( long NHerm );
void EditItem( int Item, int HnoHna, int Accion );
void HighLight( int NItem, char fondo, char texto );
int ComparaRegistros( const void *A, const void *B );
void Escr_Mensaje(char *Encabezado, char lineas, char Mensaje[][50] );
extern int DifDate( struct date FechaF, struct date FechaO, struct date *FechaD );
//)Û)Û)Û)Û)Û)Û)Û)Û)Û)Û)ÛÛ)Û)Û)Û)Û)Û)Û)Û)Û)Û)ÛÛ)Û)Û)Û)Û)Û)Û)Û)Û)Û)Û
void MuestraAyudaHerm( char columna );
void HermNuevoRegistro( HermStruct *NHerm );
int ObtenMatchHerm( HermStruct *BuscaHerm );
int Match_Herm( HermStruct A, HermStruct B );
void EditMatchRef( char Row, HermStruct * BuscaHerm );
void MatchDrawRef( char Row, HermStruct BuscaHerm, char como );
void ObtenCoordenadasMatch( char Row, int *X0, int *Y0, int *X1, int *Y1 );
//)Û)Û)Û)Û)Û)Û)Û)Û)Û)Û)ÛÛ)Û)Û)Û)Û)Û)Û)Û)Û)Û)ÛÛ)Û)Û)Û)Û)Û)Û)Û)Û)Û)Û
void muestra( int insignia, char como, char CtoVirgen );
void ImprimeFicha(void);
long CurrReg = 0;
/**************************************************************************\
|* *|
|* GestionHermanos *|
|* *|
|* Descripci¢n: *|
|* Contempla la gestion total de la base de datos de hnos/as *|
|* ALTAS, BAJAS, CONSULTAS. *|
|* *|
|* Entradas: Base a tratar ( hno/hna ) *|
|* *|
|* Salidas: OK Todo ha ido bien *|
|* ERROR Algo va mal *|
|* *|
\**************************************************************************/
int GestionHermanos( char HnoHna, int Accion )
{
int CurrItem=0, oldCol = -1;
char Mensaje[][50] = { "La base de Datos", "esta vacia." };
char File[80];
int ok = 0, BPush;
True_Push = 0;
CurrReg = 0;
getdate( &FechaActual );
strcpy( BHerm.MyHeader.ProgName, "Hermadad" );
BHerm.MyHeader.VerHi = 1;
BHerm.MyHeader.VerLow = 0;
Imprime_Estaticos(1, "Herm.img");
Imprime_Secuencia( 1 );
Imprime_Estaticos(2, "Herm.img");
if ( Accion == BAJAS )
outtextxy( 504, 32, "BORRAR" );
else if ( Accion == CONSULTAS )
outtextxy( 504, 32, "Guardar" );
settextstyle( SMALL_FONT, HORIZ_DIR, 5 );
// Base de Datos
if ( HnoHna == HERMANOS )
{
strcpy( File, "datos\\hermanos.dbf" );
FICHA_REGISTRO = 0;
} else {
strcpy( File, "datos\\hermanas.dbf" );
FICHA_REGISTRO = 1;
}
if ( BHerm.AbrirReg( File, sizeof( HermStruct ) ) != OK )
Error(BHerm.cError);
// Hermanos borrados
if ( HnoHna == HERMANOS )
strcpy( File, "datos\\hnos_brr.dbf" );
else
strcpy( File, "datos\\hnas_brr.dbf" );
if ( BHBorrados.AbrirReg( File, sizeof( HERMBORRADOS ) ) != OK )
Error(BHBorrados.cError);
if ( Accion != ALTAS )
{
if ( BHerm.Registros() == 0 )
{
Escr_Mensaje( "ERROR", 2, Mensaje );
BHerm.CerrarReg();
return OK;
}
if ( BHerm.LeeReg( (void *)&SHerm, CurrReg ) != OK )
Error(BHerm.cError);
} else PreparaNuevoRegistro(HnoHna);
BHtmp2 = SHerm;
MuestraDatos();
MuestraFotografia();
while( !ok )
{
// MarcaItem( CurrItem, INTENSO );
if ( CurrItem != oldCol )
{
oldCol = CurrItem; MuestraAyudaHerm( CurrItem );
}
HighLight( CurrItem, ROJO, NEGRO );
BPush = Comprueba_Secuencia( 1, NULL );
HighLight( CurrItem, BLANCO, NEGRO );
// MarcaItem( CurrItem, NORMAL );
switch ( BPush )
{
case 0: // No se pulso ningun BOTON
while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER
// El raton todav¡a sigue pulsado
break;
case -2:
if ( (BPush = getch()) != 27 )
{
if ( BPush != 13 ) ungetch( BPush );
EditItem( CurrItem, HnoHna, Accion );
} else { ok = 1; }
break;
// Tecla Normal
case -1: // Hay una tecla especial en BUFFER
// La eliminamos
switch( getch() )
{
// Flecha Izquierda
case 75:
case 15:
CurrItem--; if ( CurrItem < 0 ) CurrItem = ULTIMO_ITEM-1;
break;
// Flecha Derecha
case 77:
case 9:
CurrItem++; if ( CurrItem >= ULTIMO_ITEM ) CurrItem = 0;
break;
// Flecha Arriba
case 72:
CurrItem--; if ( CurrItem < 0 ) CurrItem = ULTIMO_ITEM-1;
break;
// Flecha Abajo
case 80:
CurrItem++; if ( CurrItem >= ULTIMO_ITEM ) CurrItem = 0;
break;
}
break;
// INICIO DE BOTONES
// Avance
case 1:
if ( Accion != ALTAS )
{
CurrReg++;
while( CurrReg >= BHerm.Registros() ) CurrReg--;
if ( BHerm.LeeReg( (void *)&SHerm, CurrReg ) != OK )
Error(BHerm.cError);
BHtmp2 = SHerm;
MuestraDatos();
MuestraFotografia();
} else {
if ( Optar( 1, "ALTAS DE HERMANOS", "Dar de alta a este", "hermano y seguir en altas", NULL ) )
{
InsertaEnOrden(HnoHna);
PreparaNuevoRegistro(HnoHna);
MuestraDatos();
}
}
break;
// Avance Rapido
case 2:
if ( Accion != ALTAS )
{
CurrReg+=10;
while( CurrReg >= BHerm.Registros() ) CurrReg--;
if ( BHerm.LeeReg( (void *)&SHerm, CurrReg ) != OK )
Error(BHerm.cError);
BHtmp2 = SHerm;
MuestraDatos();
MuestraFotografia();
}
break;
// Retroceso
case 3:
if ( Accion != ALTAS )
{
CurrReg-=10;
if ( CurrReg < 0 ) CurrReg = 0;
if ( BHerm.LeeReg( (void *)&SHerm, CurrReg ) != OK )
Error(BHerm.cError);
BHtmp2 = SHerm;
MuestraDatos();
MuestraFotografia();
}
break;
// Retroceso Rapido
case 4:
if ( Accion != ALTAS )
{
CurrReg--;
if ( CurrReg < 0 ) CurrReg = 0;
if ( BHerm.LeeReg( (void *)&SHerm, CurrReg ) != OK )
Error(BHerm.cError);
BHtmp2 = SHerm;
MuestraDatos();
MuestraFotografia();
}
break;
// Teclas Varias
case 5:
// Mientra este en altas sirve para nada
// Bajas para eliminar la ficha si se pulsa
if ( Accion == BAJAS )
{
if ( Optar( 1, "BAJAS DE HERMANOS", "Confirme el borrado", "de la ficha actual", NULL ) )
{
if ( BHerm.DelReg( BHerm.RegActual() ) != OK )
Error(BHerm.cError);
IncluirBorrado( SHerm.NHno );
if ( BHerm.Registros() != 0 )
{
if ( BHerm.LeeReg( (void *)&SHerm, CurrReg ) != OK )
{
CurrReg = BHerm.Registros() - 1;
if ( BHerm.LeeReg( (void *)&SHerm, CurrReg ) != OK )
Error(BHerm.cError);
}
BHtmp2 = SHerm;
MuestraDatos();
MuestraFotografia();
}
}
} else
if ( Accion == CONSULTAS )
{
if ( Optar( 1, "SALVAGUARDIA DE CAMBIOS", "Seguro que deseea", "guardar los cambios ?", NULL ) )
{
/*
if ( BHerm.DelReg( BHerm.RegActual() ) != OK )
Error();
*/
SHerm.NHno = BHtmp2.NHno;
// InsertaEnOrden(HnoHna);
BHerm.EscribeReg( (void *)&SHerm, CurrReg );
}
}
break;
// Menu Principal
case 6:
ok = 1;
break;
// Buscar atras
case ULTIMO_ITEM+INICIO_ITEM+1:
if ( Accion != ALTAS )
{
BuscaItem( HACIA_ATRAS );
BHtmp2 = SHerm;
}
break;
// Reiniciar Busqueda
case ULTIMO_ITEM+INICIO_ITEM+2:
if ( Accion != ALTAS )
{
BuscaItem( DESDE_EL_PRINCIPIO );
BHtmp2 = SHerm;
}
break;
// Buscar adelante
case ULTIMO_ITEM+INICIO_ITEM+3:
if ( Accion != ALTAS )
{
BuscaItem( HACIA_ADELANTE );
BHtmp2 = SHerm;
}
break;
// Imprime la ficha personal
case ULTIMO_ITEM+INICIO_ITEM+4:
ImprimeFicha();
BHtmp2 = SHerm;
break;
// Imprime la papeleta de sitio
case ULTIMO_ITEM+INICIO_ITEM+5:
if ( Accion == CONSULTAS )
{
PapeletaDeSitio();
BHtmp2 = SHerm;
}
break;
default:
// Todos los botones que siguen pertenecen a la base de datos:
if ( BPush >= INICIO_ITEM && BPush <= 32 )
{
// Si no es el actual
if ( CurrItem != BPush-INICIO_ITEM-1 )
{
CurrItem = BPush-INICIO_ITEM-1;
}
}
}
if ( ok == 1 && Accion == ALTAS )
// Quiere realmente dar de alta a ese hermano
if ( Optar( 1, "ALTA DE HERMANOS", "Desea dar de alta", "esta ficha...", NULL ) )
InsertaEnOrden(HnoHna);
}
BHerm.CerrarReg();
BHBorrados.CerrarReg();
return OK;
}
/**************************************************************************\
|* *|
|* MuestraDatos *|
|* *|
|* Descripci¢n: *|
|* Reescribe todos los datos en la pantalla *|
|* *|
|* Entradas: (ninguna) *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void MuestraDatos(void)
{
int i;
for ( i = 0; i < 26; i++ )
HighLight( i, BLANCO, NEGRO );
};
/**************************************************************************\
|* *|
|* MarcaItem *|
|* *|
|* Descripci¢n: *|
|* Pone un marco intenso o normal al item seleccionado *|
|* *|
|* Entradas: numero de item *|
|* NORMAL, INTENSO *|
|* *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void MarcaItem( int NItem, char como )
{
struct linesettingstype lineinfo;
getlinesettings( &lineinfo );
setlinestyle( SOLID_LINE, 0, THICK_WIDTH );
setwritemode(XOR_PUT);
setcolor ( BLANCO );
rectangle( Botones[NItem+INICIO_ITEM].Left, Botones[NItem+INICIO_ITEM].Up, Botones[NItem+INICIO_ITEM].Right, Botones[NItem+INICIO_ITEM].Down );
setlinestyle( lineinfo.linestyle, lineinfo.upattern, lineinfo.thickness );
setwritemode(COPY_PUT);
if ( como == NORMAL )
{
setcolor ( NEGRO );
rectangle( Botones[NItem+INICIO_ITEM].Left, Botones[NItem+INICIO_ITEM].Up, Botones[NItem+INICIO_ITEM].Right, Botones[NItem+INICIO_ITEM].Down );
}
}
/**************************************************************************\
|* *|
|* Mensaje *|
|* *|
|* Descripci¢n: *|
|* Mustra un mensaje en pantalla y espera una tecla *|
|* *|
|* Entradas: Mensaje encabezado *|
|* 3 comentarios *|
|* *|
|* Salidas: OK Todo ha ido bien *|
|* ERROR Algo va mal *|
|* *|
\**************************************************************************/
void Escr_Mensaje(char *Encabezado, char lineas, char Mensaje[][50])
{
int Center= (296 - textwidth( Encabezado ) ) / 2;
char CMen; struct textsettingstype texttypeinfo;
void *Imagen;
if ( (Imagen = malloc( JD_imagesize(170, 165, 470, 315) ) ) == NULL )
return;
getimage( 170, 165, 470, 315, Imagen );
gettextsettings( &texttypeinfo );
Imprime_Estaticos(20, "Herm.img");
settextstyle( SMALL_FONT, HORIZ_DIR, 6 );
setcolor( 63 ); outtextxy( 172+Center, 165, Encabezado );
setcolor( ROJO );
for ( CMen = 0; CMen < lineas; CMen++ )
{
Center= (296 - textwidth( Mensaje[CMen] ) ) / 2;
outtextxy( 172+Center, 200+20*CMen, Mensaje[CMen] );
}
settextstyle( texttypeinfo.font, texttypeinfo.direction, texttypeinfo.charsize );
while( kbhit() ) getch();
Espera_TeclaRaton();
putimage( 170, 165, Imagen, COPY_PUT );
free( Imagen );
}
/**************************************************************************\
|* *|
|* EditItem *|
|* *|
|* Descripci¢n: *|
|* Edita el item que se le pasa como parametro, para ello *|
|* se mantendr  invertido el campo el tiempo que dure la ed. *|
|* *|
|* Entradas: Item ha editar *|
|* *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void EditItem( int NItem, int HnoHna, int Accion )
{
char buffer[80];
int posX, posY, posX1, posY1;
int tmpVar;
posX = Botones[NItem+INICIO_ITEM].Left+3;
posY = Botones[NItem+INICIO_ITEM].Up+1;
posX1 = Botones[NItem+INICIO_ITEM].Right-3;
posY1 = Botones[NItem+INICIO_ITEM].Down-1;
switch( NItem )
{
// N§ de hermano
case 0:
if ( Accion != ALTAS )
strcpy( buffer, "0" );
else
sprintf( buffer, "%ld", SHerm.NHno );
if ( !( InputCadenaG_T5( buffer, 1, 4, BLANCO, AZUL, posX, posY, posX1, posY1 ) >> 8 ) )
if ( atol(buffer) < ( Config.NHnoHna[HnoHna]+1 ) && Accion == ALTAS )
{
if ( BuscaConfirmaHermanoBajo( atol(buffer)) )
SHerm.NHno = atol( buffer );
} else
if ( Accion == ALTAS && atol(buffer) == (Config.NHnoHna[HnoHna]+1) ) SHerm.NHno = atol( buffer );
else SHerm.NHno = atol( buffer );
break;
// Nombre
case 1:
if ( Accion != ALTAS )
buffer[0] = '\0';
else
strcpy( buffer, SHerm.Nombre );
if ( !( InputCadenaG_T5( buffer, 0, 10, BLANCO, AZUL, posX, posY, posX1, posY1 ) >> 8 ) )
strcpy( SHerm.Nombre, buffer );
break;
// Primer Apellido
case 2:
if ( Accion != ALTAS )
buffer[0] = '\0';
else
strcpy( buffer, SHerm.Apellido1 );
if ( !( InputCadenaG_T5( buffer, 0, 12, BLANCO, AZUL, posX, posY, posX1, posY1 ) >> 8 ) )
strcpy( SHerm.Apellido1, buffer );
break;
// Segundo Apellido
case 3:
if ( Accion != ALTAS )
buffer[0] = '\0';
else
strcpy( buffer, SHerm.Apellido2 );
if ( !( InputCadenaG_T5( buffer, 0, 12, BLANCO, AZUL, posX, posY, posX1, posY1 ) >> 8 ) )
strcpy( SHerm.Apellido2, buffer );
break;
// Direccion
case 4:
if ( Accion != ALTAS )
buffer[0] = '\0';
else
strcpy( buffer, SHerm.Direccion );
if ( !( InputCadenaG_T5( buffer, 0, 29, BLANCO, AZUL, posX, posY, posX1, posY1 ) >> 8 ) )
strcpy( SHerm.Direccion, buffer );
break;
// Numero
case 5:
strcpy( buffer, SHerm.Num );
if ( !( InputCadenaG_T5( buffer, 0, 3, BLANCO, AZUL, posX, posY, posX1, posY1 ) >> 8 ) )
strcpy( SHerm.Num, buffer );
break;
// Piso
case 6:
strcpy( buffer, SHerm.Piso );
if ( !( InputCadenaG_T5( buffer, 0, 5, BLANCO, AZUL, posX, posY, posX1, posY1 ) >> 8 ) )
strcpy( SHerm.Piso, buffer );
break;
// C.P.
case 7:
sprintf( buffer, "%ld", SHerm.CodP );
if ( !( InputCadenaG_T5( buffer, 1, 5, BLANCO, AZUL, posX, posY, posX1, posY1 ) >> 8 ) )
SHerm.CodP = atol( buffer );
break;
// Poblacion
case 8:
if ( Accion != ALTAS )
buffer[0] = '\0';
else
strcpy( buffer, SHerm.Poblacion );
if ( !( InputCadenaG_T5( buffer, 0, 15, BLANCO, AZUL, posX, posY, posX1, posY1 ) >> 8 ) )
strcpy( SHerm.Poblacion, buffer );
break;
// Provincia
case 9:
strcpy( buffer, SHerm.Provincia );
if ( !( InputCadenaG_T5( buffer, 0, 15, BLANCO, AZUL, posX, posY, posX1, posY1 ) >> 8 ) )
strcpy( SHerm.Provincia, buffer );
break;
// Fecha de Nacimiento
case 10:
if ( Accion != ALTAS )
buffer[0] = '\0';
else
sprintf( buffer, "%02d%02d%04d", (int)SHerm.FechaN.da_day
, (int)SHerm.FechaN.da_mon
, (int)SHerm.FechaN.da_year );
if ( !( InputCadenaG_T5( buffer, 1, 8, BLANCO, AZUL, posX, posY, posX1, posY1 ) >> 8 ) )
{
if ( buffer[0] == '\0' )
{
SHerm.FechaN.da_day = 0;
SHerm.FechaN.da_mon = 0;
SHerm.FechaN.da_year = 0;
} else {
SHerm.FechaN.da_day = (buffer[0]-'0')*10+(buffer[1]-'0');
SHerm.FechaN.da_mon = (buffer[2]-'0')*10+(buffer[3]-'0');
SHerm.FechaN.da_year = (buffer[4]-'0')*1000+(buffer[5]-'0')*100+(buffer[6]-'0')*10+(buffer[7]-'0');
}
}
if ( // Mayor de 18 a¤os
DifDate( FechaActual, SHerm.FechaN, NULL ) > 18 &&
/*
( FechaActual.da_year - SHerm.FechaN.da_year ) > 18 &&
// Mas de un a¤o de antiguedad
( FechaActual.da_year - SHerm.Antig.da_year ) > 1
*/
DifDate( FechaActual, SHerm.Antig, NULL ) > 1
)
{
SHerm.Varios.PuedVotar = 1;
} else {
SHerm.Varios.PuedVotar = 0;
}
HighLight( 19, BLANCO, NEGRO );
break;
// Antiguedad
case 11:
if ( Accion != ALTAS )
buffer[0] = '\0';
else
sprintf( buffer, "%02d%02d%04d", (int)SHerm.Antig.da_day
, (int)SHerm.Antig.da_mon
, (int)SHerm.Antig.da_year );
if ( !( InputCadenaG_T5( buffer, 1, 8, BLANCO, AZUL, posX, posY, posX1, posY1 ) >> 8 ) )
{
if ( buffer[0] == '\0' )
{
SHerm.Antig.da_day = 0;
SHerm.Antig.da_mon = 0;
SHerm.Antig.da_year = 0;
} else {
SHerm.Antig.da_day = (buffer[0]-'0')*10+(buffer[1]-'0');
SHerm.Antig.da_mon = (buffer[2]-'0')*10+(buffer[3]-'0');
SHerm.Antig.da_year = (buffer[4]-'0')*1000+(buffer[5]-'0')*100+(buffer[6]-'0')*10+(buffer[7]-'0');
}
}
if ( // Mayor de 18 a¤os
/*
( FechaActual.da_year - SHerm.FechaN.da_year ) > 18 &&
// Mas de un a¤o de antiguedad
( FechaActual.da_year - SHerm.Antig.da_year ) > 1
*/
DifDate( FechaActual, SHerm.FechaN, NULL ) > 18 &&
/*
( FechaActual.da_year - SHerm.FechaN.da_year ) > 18 &&
// Mas de un a¤o de antiguedad
( FechaActual.da_year - SHerm.Antig.da_year ) > 1
*/
DifDate( FechaActual, SHerm.Antig, NULL ) > 1
)
{
SHerm.Varios.PuedVotar = 1;
} else
{
SHerm.Varios.PuedVotar = 0;
}
HighLight( 19, BLANCO, NEGRO );
break;
// Reserva
case 12:
SHerm.Varios.Reserva = !SHerm.Varios.Reserva;
break;
// Posicion
case 13:
strcpy( buffer, SHerm.Posicion );
if ( !( InputCadenaG_T5( buffer, 0, 15, BLANCO, AZUL, posX, posY, posX1, posY1 ) >> 8 ) )
strcpy( SHerm.Posicion, buffer );
break;
// Insignia
case 14:
tmpVar = EscogeInsignia( SHerm.Varios.CtoVirgen );
SHerm.Insignia = ( tmpVar == -1 ) ? SHerm.Insignia : tmpVar;
break;
// Telefono 1
case 15:
if ( Accion != ALTAS )
buffer[0] = '\0';
else
strcpy( buffer, SHerm.Telefono1 );
if ( !( InputCadenaG_T5( buffer, 0, 15, BLANCO, AZUL, posX, posY, posX1, posY1 ) >> 8 ) )
strcpy( SHerm.Telefono1, buffer );
break;
// Telefono 2
case 16:
strcpy( buffer, SHerm.Telefono2 );
if ( !( InputCadenaG_T5( buffer, 0, 15, BLANCO, AZUL, posX, posY, posX1, posY1 ) >> 8 ) )
strcpy( SHerm.Telefono2, buffer );
break;
// De aqui para abajo son CheckBox y se tratan de forma diferente...
// Realiza estacion de penitencia
case 17:
// SOLO ACCESIBLE DESDE DENTRO Y FUERA
if ( Optar( 1, "ALTERACION DE CAMPOS", "Seguro que desea", "alterar ese campo?", NULL ) )
SHerm.Varios.RealPenit = !SHerm.Varios.RealPenit;
break;
// Acogido a Cuota Familiar
case 18:
SHerm.Varios.CuotaFam = !SHerm.Varios.CuotaFam;
break;
// Tiene posibilidad de votar
case 19:
SHerm.Varios.PuedVotar = !SHerm.Varios.PuedVotar;
break;
// Recibe notificaciones
case 20:
SHerm.Varios.Notific = !SHerm.Varios.Notific;
break;
// Tiene tunica de la hermandad
case 21:
SHerm.Varios.TunicaHd = !SHerm.Varios.TunicaHd;
break;
// N§ de Tunica Solo si Tiene tunica de la hermandad
case 22:
if ( SHerm.Varios.TunicaHd )
{
sprintf( buffer, "%ld", SHerm.NTunica );
if ( !( InputCadenaG_T5( buffer, 1, 5, BLANCO, AZUL, posX, posY, posX1, posY1 ) >> 8 ) )
SHerm.NTunica = atol( buffer );
}
break;
// Cristo o Virgen
case 23:
SHerm.Varios.CtoVirgen = !SHerm.Varios.CtoVirgen;
HighLight( 24, BLANCO, NEGRO );
HighLight( 14, BLANCO, NEGRO );
break;
// Cristo o Virgen
case 24:
SHerm.Varios.CtoVirgen = !SHerm.Varios.CtoVirgen;
HighLight( 23, BLANCO, NEGRO );
HighLight( 14, BLANCO, NEGRO );
break;
// Comentario
case 25:
EditComentario();
break;
}
while( kbhit() ) getch();
HighLight( NItem, BLANCO, NEGRO );
}
/**************************************************************************\
|* *|
|* HighLight *|
|* *|
|* Descripci¢n: *|
|* Sobreimprime el fondo del campo. *|
|* *|
|* Entradas: Item, fondo. *|
|* *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void HighLight( int NItem, char fondo, char texto )
{
int posX, posY;
char buffer[80];
int i;
posX = Botones[NItem+INICIO_ITEM].Left;
posY = Botones[NItem+INICIO_ITEM].Up;
setfillstyle( SOLID_FILL, fondo );
bar( Botones[NItem+INICIO_ITEM].Left, Botones[NItem+INICIO_ITEM].Up, Botones[NItem+INICIO_ITEM].Right, Botones[NItem+INICIO_ITEM].Down );
setcolor( texto );
// Por defecto buffer vacio (un espacio en blanco)
sprintf( buffer, " " );
// Mete en Buffer lo que hay que imprimir, para poder justificarlo
switch ( NItem )
{
// N§ de hermano
case 0:
sprintf( buffer, " %05ld", SHerm.NHno );
break;
// Nombre
case 1:
sprintf( buffer, "%-15s", SHerm.Nombre );
break;
// Primer Apellido
case 2:
sprintf( buffer, "%-15s", SHerm.Apellido1 );
break;
//
case 3:
sprintf( buffer, "%-15s", SHerm.Apellido2 );
break;
// Direccion
case 4:
sprintf( buffer, "%-20s", SHerm.Direccion );
break;
// Numero
case 5:
sprintf( buffer, "%-3s", SHerm.Num );
break;
// Piso
case 6:
sprintf( buffer, "%-5s", SHerm.Piso );
break;
// C.P.
case 7:
sprintf( buffer, " %05ld", SHerm.CodP );
break;
// Poblacion
case 8:
sprintf( buffer, "%-15s", SHerm.Poblacion );
break;
// Provincia
case 9:
sprintf( buffer, "%-15s", SHerm.Provincia );
break;
// Fecha de Nacimiento
case 10:
sprintf( buffer, "%02d-%02d-%04d", (int)SHerm.FechaN.da_day
, (int)SHerm.FechaN.da_mon
, (int)SHerm.FechaN.da_year );
break;
// Antiguedad
case 11:
sprintf( buffer, "%02d-%02d-%04d", (int)SHerm.Antig.da_day
, (int)SHerm.Antig.da_mon
, (int)SHerm.Antig.da_year );
break;
// Reserva
case 12:
if ( SHerm.Varios.Reserva )
sprintf( buffer, ".X" );
break;
// Ultima posicion
case 13:
sprintf( buffer, "%-15s", SHerm.Posicion );
break;
// Insignia
case 14:
sprintf( buffer, "%-15s", Config.Insignia[ ( SHerm.Varios.CtoVirgen == 0 ? 0 : 1)*20 + SHerm.Insignia ].NInsignia );
break;
// Telefono 1
case 15:
sprintf( buffer, "%-15s", SHerm.Telefono1 );
break;
// Telefono 2
case 16:
sprintf( buffer, "%-15s", SHerm.Telefono2 );
break;
// Realizo estacion de penitencia
case 17:
posY-=3;
if ( SHerm.Varios.RealPenit )
sprintf( buffer, "*" );
break;
// Acogido a Cuota Familiar
case 18:
posY-=3;
if ( SHerm.Varios.CuotaFam )
sprintf( buffer, "*" );
break;
// Tiene posibilidad de votar
case 19:
posY-=3;
if ( SHerm.Varios.PuedVotar )
sprintf( buffer, "*" );
break;
// Recibe notificaciones
case 20:
if ( SHerm.Varios.Notific )
sprintf( buffer, "*" );
posY-=3;
break;
// Tiene tunica de la hermandad
case 21:
posY-=3;
if ( SHerm.Varios.TunicaHd )
sprintf( buffer, "*" );
break;
// N§ de Tunica
case 22:
if ( SHerm.Varios.TunicaHd )
sprintf( buffer, "%04d", SHerm.NTunica );
break;
// Cristo o Virgen
case 23:
posY-=3;
if ( !SHerm.Varios.CtoVirgen )
sprintf( buffer, "*" );
break;
// Cristo o Virgen
case 24:
posY-=3;
if ( SHerm.Varios.CtoVirgen )
sprintf( buffer, "*" );
break;
// El comentario es el 25 pero este se trata a parte
case 25:
for ( i = 0; i<6; i++ )
outtextxy( posX+3, (posY+1)+20*i, SHerm.Comentario[i] );
return;
}
outtextxy( posX+3, posY+1, buffer );
}
/**************************************************************************\
|* *|
|* Error *|
|* *|
|* Descripci¢n: *|
|* Deber  mostar un mensaje de error y abandonar el programa *|
|* *|
|* Entradas: (ninguna) *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void Error(char *cError)
{
closegraph();
cprintf("\r\nSe producio un error: %s", cError );
cprintf("\r\n%s\r\n", BHerm.cError );
BHerm.CerrarReg();
exit(1);
}
/**************************************************************************\
|* *|
|* PreparaNuevoRegistro *|
|* *|
|* Descripci¢n: *|
|* Vacia la ficha para poder rellenarla desde cero *|
|* *|
|* Entradas: (ninguna) *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void PreparaNuevoRegistro(int HnoHna)
{
int i;
SHerm.NHno = Config.NHnoHna[HnoHna]+1;
strcpy( SHerm.Nombre, "" );
strcpy( SHerm.Apellido1, "" );
strcpy( SHerm.Apellido2, "" );
strcpy( SHerm.Direccion, "" );
strcpy( SHerm.Num, "" );
strcpy( SHerm.Piso, "" );
SHerm.CodP = 0;
strcpy( SHerm.Poblacion, "" );
strcpy( SHerm.Provincia, "" );
SHerm.FechaN.da_day = 0;
SHerm.FechaN.da_mon = 0;
SHerm.FechaN.da_year = 0;
SHerm.Antig.da_day = FechaActual.da_day;
SHerm.Antig.da_mon = FechaActual.da_mon;
SHerm.Antig.da_year = FechaActual.da_year;
SHerm.Varios.Reserva = 0;
strcpy( SHerm.Posicion, "" );
SHerm.Insignia = 0;
strcpy( SHerm.Telefono1, "" );
strcpy( SHerm.Telefono2, "" );
SHerm.Varios.CuotaFam = 0;
SHerm.Varios.Notific = 0;
SHerm.Varios.PuedVotar = 0;
SHerm.Varios.RealPenit = 0;
SHerm.Varios.TunicaHd = 0;
SHerm.Varios.CtoVirgen = 0;
// Aqui vaciamos el comentario
for ( i=0; i<6; i++ )
strcpy( SHerm.Comentario[i], "" );
}
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
/**************************************************************************\
|* *|
|* BuscaItem *|
|* *|
|* Descripci¢n: *|
|* Buca el primer item que coincida desde la pos. del parametro*|
|* *|
|* Entradas: HACIA_ATRAS DESDE_EL_PRINCIPIO HACIA_DELANTE *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
/*
int BuscaItem( int HaciaDonde )
{
char Incremento; // Sirve para saber cuanto de incrementa
// cada vez que se recorre la base
long posVisitada; // Posicion que estamos visitando
char enc; // flag para saber si enc == cierto
HermStruct tmpHerm; // tmp de intercambio
char Mensaje[3][50];
long oldPos;
// Dado que la base puede estar odenada segun cualquier topico
// creo mas razonable buscar como toda la vida: DESDE el principio
// hasta que se encuentre el item.
oldPos = BHerm.RegActual();
if ( HaciaDonde == DESDE_EL_PRINCIPIO )
{
posVisitada = 0; Incremento = 1;
} else {
posVisitada = CurrReg; Incremento = HaciaDonde;
// La ficha en la que estoy ya la he visto;; Busco otra
posVisitada += Incremento;
}
enc = 0;
// Continua mientras este dentro de los limites y no se encuentre coincidencias
while( posVisitada >= 0 && posVisitada < BHerm.Registros() && !enc )
{
// leo el registro
BHerm.LeeReg( &tmpHerm, posVisitada );
if ( ComparacionParcial( tmpHerm ) )
{
enc = 1;
CurrReg = posVisitada;
}
// incremento la posici¢n
posVisitada += Incremento;
};
// Si se encuentra conincidencia OK!! las paso al registro SHerm
if ( enc )
{
SHerm = tmpHerm;
MuestraDatos();
MuestraFotografia();
} else {
if ( HaciaDonde == DESDE_EL_PRINCIPIO )
{
strcpy( Mensaje[0], "No se encontr¢ niguna" );
strcpy( Mensaje[1], "coincidencia." );
Escr_Mensaje( "Comando BUSCAR", 2, Mensaje );
} else {
strcpy( Mensaje[0], "No se encontraron mas" );
strcpy( Mensaje[1], "coincidencias en este" );
strcpy( Mensaje[2], "sentido. Pruebe otro." );
Escr_Mensaje( "Comando BUSCAR", 3, Mensaje );
}
CurrReg = oldPos;
}
return enc;
}
*/
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
/**************************************************************************\
|* *|
|* InsertaEnOrden *|
|* *|
|* Descripci¢n: *|
|* Inserta en orden, atendiendo a como este ordenada la base. *|
|* *|
|* Entradas: (ninguna) *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void InsertaEnOrden(char HnoHna)
{
long avance;
char enc; char PorDonde;
enc = 0;
/*
if ( Config.item_ordenado == 0 )
{
PorDonde = ARRIBA;
avance = BHerm.Registros() - 1;
while( avance >= 0 && !enc )
{
BHerm.LeeReg( (void *)&BHtmp, avance );
if ( ComparaRegistros( (void *)&SHerm, (void *)&BHtmp ) > 0 )
avance --;
else
enc = 1;
};
} else {
*/
PorDonde = ABAJO;
avance = 0;
while( avance < BHerm.Registros() && !enc )
{
BHerm.LeeReg( (void *)&BHtmp, avance );
if ( ComparaRegistros( (void *)&SHerm, (void *)&BHtmp ) > 0 )
avance ++;
else
enc = 1;
};
// }
// Si se encuentra, inserto por abajo de avance, sino al final
if ( enc )
BHerm.InsReg( (void *)&SHerm, avance, PorDonde );
else
BHerm.InsReg( (void *)&SHerm, BHerm.Registros(), ARRIBA );
// Hay que tener en cuenta el aumentar el numero de hermanos/as
Config.NHnoHna[HnoHna] ++;
if ( BConfig.EscribeReg((void *)&Config, 0) != OK )
Error(BConfig.cError);
};
/**************************************************************************\
|* *|
|* ComparaRegistros *|
|* *|
|* Descripci¢n: *|
|* Compara los registros, atendiendo a que tiene que comparar *|
|* esto se guarda en Config.item_ordenado *|
|* *|
|* *|
|* *|
|* *|
|* *|
|* Entradas: Elemento A y B, a comparar *|
|* *|
|* Salidas: Si A << B < 0 *|
|* A == B = 0 *|
|* A >> B > 0 *|
|* *|
\**************************************************************************/
int ComparaRegistros( const void *A, const void *B )
{
char dev;
// Tipos de ordenaciones posibles
switch( Config.item_ordenado[FICHA_REGISTRO] )
{
// Por N¦ de Hermanos
case 0:
if ( ( ((HermStruct *)A) -> NHno ) < ( ((HermStruct *)B) -> NHno ) ) return -1;
if ( ( ((HermStruct *)A) -> NHno ) == ( ((HermStruct *)B) -> NHno ) ) return 0;
if ( ( ((HermStruct *)A) -> NHno ) > ( ((HermStruct *)B) -> NHno ) ) return 1;
break;
// Por Nombre
case 1:
dev = strcmpi( ( ((HermStruct *)A) -> Nombre ), ( ((HermStruct *)B) -> Nombre ) );
if ( dev == 0 )
return strcmpi( ( ((HermStruct *)A) -> Apellido1 ), ( ((HermStruct *)B) -> Apellido1 ) );
else
return dev;
// Por Apellido1
case 2:
dev = strcmpi( ( ((HermStruct *)A) -> Apellido1 ), ( ((HermStruct *)B) -> Apellido1 ) );
if ( dev == 0 )
return strcmpi( ( ((HermStruct *)A) -> Apellido2 ), ( ((HermStruct *)B) -> Apellido2 ) );
else
return dev;
// Por Direccion
case 3:
return strcmpi( ( ((HermStruct *)A) -> Direccion ), ( ((HermStruct *)B) -> Direccion ) );
// Por Poblacion
case 4:
return strcmpi( ( ((HermStruct *)A) -> Poblacion ), ( ((HermStruct *)B) -> Poblacion ) );
// Por Provincia
case 5:
return strcmpi( ( ((HermStruct *)A) -> Provincia ), ( ((HermStruct *)B) -> Provincia ) );
// Por Fecha de Nacimiento
case 6:
if ( ( ((HermStruct *)A) -> FechaN.da_year ) < ( ((HermStruct *)B) -> FechaN.da_year ) ) return -1;
if ( ( ((HermStruct *)A) -> FechaN.da_year ) > ( ((HermStruct *)B) -> FechaN.da_year ) ) return 1;
if ( ( ((HermStruct *)A) -> FechaN.da_mon ) < ( ((HermStruct *)B) -> FechaN.da_mon ) ) return -1;
if ( ( ((HermStruct *)A) -> FechaN.da_mon ) > ( ((HermStruct *)B) -> FechaN.da_mon ) ) return 1;
if ( ( ((HermStruct *)A) -> FechaN.da_day ) < ( ((HermStruct *)B) -> FechaN.da_day ) ) return -1;
if ( ( ((HermStruct *)A) -> FechaN.da_day ) > ( ((HermStruct *)B) -> FechaN.da_day ) ) return 1;
return 0;
// Por Antiguedad
case 7:
if ( ( ((HermStruct *)A) -> Antig.da_year ) < ( ((HermStruct *)B) -> Antig.da_year ) ) return -1;
if ( ( ((HermStruct *)A) -> Antig.da_year ) > ( ((HermStruct *)B) -> Antig.da_year ) ) return 1;
if ( ( ((HermStruct *)A) -> Antig.da_mon ) < ( ((HermStruct *)B) -> Antig.da_mon ) ) return -1;
if ( ( ((HermStruct *)A) -> Antig.da_mon ) > ( ((HermStruct *)B) -> Antig.da_mon ) ) return 1;
if ( ( ((HermStruct *)A) -> Antig.da_day ) < ( ((HermStruct *)B) -> Antig.da_day ) ) return -1;
if ( ( ((HermStruct *)A) -> Antig.da_day ) > ( ((HermStruct *)B) -> Antig.da_day ) ) return 1;
return 0;
// Por Insignia
case 8:
if ( ( ((HermStruct *)A) -> Insignia ) < ( ((HermStruct *)B) -> Insignia ) ) return -1;
if ( ( ((HermStruct *)A) -> Insignia ) > ( ((HermStruct *)B) -> Insignia ) ) return 1;
if ( ( ((HermStruct *)A) -> Antig.da_year ) < ( ((HermStruct *)B) -> Antig.da_year ) ) return -1;
if ( ( ((HermStruct *)A) -> Antig.da_year ) > ( ((HermStruct *)B) -> Antig.da_year ) ) return 1;
if ( ( ((HermStruct *)A) -> Antig.da_mon ) < ( ((HermStruct *)B) -> Antig.da_mon ) ) return -1;
if ( ( ((HermStruct *)A) -> Antig.da_mon ) > ( ((HermStruct *)B) -> Antig.da_mon ) ) return 1;
if ( ( ((HermStruct *)A) -> Antig.da_day ) < ( ((HermStruct *)B) -> Antig.da_day ) ) return -1;
if ( ( ((HermStruct *)A) -> Antig.da_day ) > ( ((HermStruct *)B) -> Antig.da_day ) ) return 1;
break;
// Por n§ de Tunica
case 9:
if ( ( ((HermStruct *)A) -> Varios.RealPenit ) < ( ((HermStruct *)B) -> Varios.RealPenit ) ) return -1;
if ( ( ((HermStruct *)A) -> Varios.RealPenit ) > ( ((HermStruct *)B) -> Varios.RealPenit ) ) return 1;
if ( ( ((HermStruct *)A) -> Varios.CtoVirgen ) < ( ((HermStruct *)B) -> Varios.CtoVirgen ) ) return -1;
if ( ( ((HermStruct *)A) -> Varios.CtoVirgen ) > ( ((HermStruct *)B) -> Varios.CtoVirgen ) ) return 1;
if ( ( ((HermStruct *)A) -> NTunica ) < ( ((HermStruct *)B) -> NTunica ) ) return -1;
if ( ( ((HermStruct *)A) -> NTunica ) > ( ((HermStruct *)B) -> NTunica ) ) return 1;
return 0;
}
return -1;
}
/**************************************************************************\
|* *|
|* BuscaConfirmaHermanoBajo *|
|* *|
|* Descripci¢n: *|
|* Busca y Confirma, que va a ocupar la posicion de un hermano *|
|* eliminado, con posibilidad de volver aun... *|
|* *|
|* Entradas: n§ de hermano *|
|* Salidas: 1 Encontrado y desea ocupar posicion *|
|* *|
\**************************************************************************/
int BuscaConfirmaHermanoBajo( long NHerm )
{
long i=0; char enc = 0;
HermanosBorrados.NHerm = -1;
for( i=0; i<BHBorrados.Registros() && enc == 0; i++ )
{
if ( HermanosBorrados.NHerm == NHerm )
enc = 1;
else
BHBorrados.LeeReg( (void *)&HermanosBorrados, i );
}
if ( enc )
if ( Optar( 1, "POSICION DUDOSA", "Ese hermano esta eliminado", "¨Seguro de ocupar su posici¢n?", NULL ) )
{
BHBorrados.DelReg( BHBorrados.RegActual() );
return 1;
}
return 0;
}
/**************************************************************************\
|* *|
|* IncluirBorrado *|
|* *|
|* Descripci¢n: *|
|* Carga, (si existe), la foto asignada y la muestra. *|
|* *|
|* Entradas: N§ de Hermano *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void IncluirBorrado( int NHno )
{
HermanosBorrados.NHerm = NHno;
HermanosBorrados.FechaBorrado.da_day = FechaActual.da_day;
HermanosBorrados.FechaBorrado.da_mon = FechaActual.da_mon;
HermanosBorrados.FechaBorrado.da_year = FechaActual.da_year;
// Inserta un Reg por arriba de pos.
BHBorrados.InsReg( (void *)&HermanosBorrados, BHBorrados.Registros(), ARRIBA );
}
/**************************************************************************\
|* *|
|* EscogeInsignia *|
|* *|
|* Descripci¢n: *|
|* Despliega un cuadro con las insignias correspondientes *|
|* *|
|* Entradas: Insignias Cto/Virgen *|
|* Salidas: n§ de insignia escogida *|
|* *|
\**************************************************************************/
char EscogeInsignia( int CtoVirgen )
{
void *ptr_fondo;
char insignia = 0, ok = 0, old_color;
struct textsettingstype texttypeinfo;
if ( CtoVirgen != 0 ) CtoVirgen = 1;
// Asignar memoria
if ( (ptr_fondo = malloc( JD_imagesize( 155, 180, 285, 302 ) ) ) != NULL )
{
getimage( 155, 180, 285, 302, ptr_fondo );
setfillstyle( SOLID_FILL, GRIS_CLARO );
bar( 155, 180, 285, 302 ); // Desplegar cuadro
old_color = getcolor();
setcolor(NEGRO);
rectangle( 155, 180, 285, 302 );
gettextsettings( &texttypeinfo );
settextstyle( SMALL_FONT, HORIZ_DIR, 4 );
// Mostramos datos
for( insignia = 0; insignia < 10; insignia++)
muestra( insignia, NORMAL, CtoVirgen );
insignia = 0;
muestra( insignia, INTENSO, CtoVirgen );
do{
while( !kbhit() );
switch ( getch() )
{
case 0:
switch( getch() )
{
// Flecha Abajo
case 80:
muestra( insignia, NORMAL, CtoVirgen );
insignia--; if ( insignia < 0 ) insignia = 0;
if ( insignia == 9 )
{
for( insignia = 0; insignia < 10; insignia++)
muestra( insignia, NORMAL, CtoVirgen );
insignia = 9;
}
muestra( insignia, INTENSO, CtoVirgen );
break;
// Flecha Arriba
case 72:
muestra( insignia, NORMAL, CtoVirgen );
insignia++; if ( insignia > 19 ) insignia = 19;
if ( insignia == 10 )
{
for( insignia = 10; insignia < 20; insignia++)
muestra( insignia, NORMAL, CtoVirgen );
insignia = 10;
}
muestra( insignia, INTENSO, CtoVirgen );
break;
}
break;
// Escape
case 27:
ok = 1;
insignia = -1;
break;
// Intro
case 13:
ok = 1;
break;
}
}while( !ok );
// etc...
putimage( 155, 180, ptr_fondo, COPY_PUT );
settextstyle( texttypeinfo.font, texttypeinfo.direction, texttypeinfo.charsize );
setcolor( old_color );
free( ptr_fondo );
}
return insignia;
}
void muestra( int insignia, char como, char CtoVirgen )
{
setfillstyle( SOLID_FILL, (como==NORMAL) ? GRIS_CLARO : ROJO );
bar( 160, 291-12*(insignia%10), 280, 301-12*(insignia%10) );
outtextxy( 165, 290-12*(insignia%10), Config.Insignia[insignia+20*CtoVirgen].NInsignia );
}
/**************************************************************************\
|* *|
|* MuestraFotografia *|
|* *|
|* Descripci¢n: *|
|* Carga, (si existe), la foto asignada y la muestra. *|
|* *|
|* Entradas: (ninguna) *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void MuestraFotografia(void)
{
char buffer[80];
sprintf( buffer, "fotos\hn%c%5ld.pcx", ( SHerm.Varios.CtoVirgen == 0 ) ? 'o' : 'a' , SHerm.NHno );
if ( file_exists(buffer) )
{
while( kbhit() ) getch();
}
};
/**************************************************************************\
|* *|
|* OrdenaBase *|
|* *|
|* Descripci¢n: *|
|* Ordena la base de datos segun el topico que indique el *|
|* usuario... *|
|* *|
|* Entradas: Base a tratar ( hno/hna ) *|
|* *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void OrdenaBase( char HnoHna )
{
int ok = 0, BPush;
int t_orden = 0;
char Mensaje[][50] = { "La base de Datos", "esta vacia." };
char File[80];
strcpy( BHerm.MyHeader.ProgName, "Hermadad" );
BHerm.MyHeader.VerHi = 1;
BHerm.MyHeader.VerLow = 0;
// Base de Datos
if ( HnoHna == HERMANOS )
{
strcpy( File, "datos\\hermanos.dbf" );
FICHA_REGISTRO = 0;
}
else
{
strcpy( File, "datos\\hermanas.dbf" );
FICHA_REGISTRO = 1;
}
if ( BHerm.AbrirReg( File, sizeof( HermStruct ) ) != OK )
Error(BHerm.cError);
if ( BHerm.Registros() == 0 )
{
Escr_Mensaje( "ERROR", 2, Mensaje );
BHerm.CerrarReg();
return;
}
Imprime_Estaticos( 3, "Herm.img");
Imprime_Secuencia( 3 );
Imprime_Estaticos( 4, "Herm.img");
do {
BPush = Comprueba_Secuencia( 3, NULL );
switch ( BPush )
{
case 0: // No se pulso ningun BOTON
while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER
// El raton todav¡a sigue pulsado
break;
case -2:
while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER
break;
// Tecla Normal
case -1: // Hay una tecla especial en BUFFER
// La eliminamos
while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER
default:
if ( BPush >= 1 && BPush <= 10 )
{
ok = 1;
t_orden = BPush - 1;
}
}
} while( !ok ) ;
if ( t_orden != 9 )
{
Imprime_Estaticos( 5, "Herm.img");
Config.item_ordenado[FICHA_REGISTRO] = t_orden;
if ( BConfig.EscribeReg((void *)&Config, 0) != OK )
Error(BConfig.cError);
BHerm.SortReg(ComparaRegistros);
BHerm.CerrarReg();
}
}
/////// EDITAR COMENTARIO....
int EditComentario(void)
{
// int ls; // longitud cadena
char *s1, *s, *s_tmp, *s_tmp1; // puntero a cadena inicial
int key, ok, Linea = 0, Columna = 0, X, Y, lmax, X1/*, Y1*/;
char Buffer[80];
lmax = 49;
X = Botones[25+INICIO_ITEM].Left+2;
Y = Botones[25+INICIO_ITEM].Up+2;
X1 = Botones[25+INICIO_ITEM].Right-2;
// Y1 = Botones[25+INICIO_ITEM].Down-2;
ok = 0;
s_tmp1 = s_tmp = s = s1 = SHerm.Comentario[0]; // inicio cadena
s += lmax ; *s = '\0';
s = s_tmp;
do {
setfillstyle(SOLID_FILL, AZUL); // selecciona los atributos de
bar( X, Y+Linea*20, X1, Y+Linea*20 + 20); // relleno, y Borra el campo
setcolor(BLANCO); // devuelve el color a su estado
outtextxy( X, Y+Linea*20, s1 ); // e imprime la cadena.
// ls = strlen ( s ); // Longitud de la cadena actual
if ( Columna < lmax ) { // Muestra cursor si es posible
strncpy( Buffer, s1, Columna );
Buffer[Columna] = '\0';
setcolor(ROJO);
outtextxy( X + textwidth( Buffer ), Y+Linea*20+2, "Ü");
}
switch ( ( key = getch() ) ) { // obtiene tecla
// Intro o Return
case 13:
if( Linea < 5 ) {
setfillstyle(SOLID_FILL, BLANCO); // selecciona los atributos de
bar( X, Y+Linea*20, X1, Y+Linea*20 + 20); // relleno, y Borra el campo
setcolor(NEGRO); // devuelve el color a su estado
outtextxy( X, Y+Linea*20, s1 ); // e imprime la cadena.
Linea++;
s_tmp1 = s_tmp = s = s1 = SHerm.Comentario[Linea]; // inicio cadena
s += lmax; *s = '\0';
Columna = 0;
s = s_tmp1 = s_tmp = s1;
}
break;
case 0:
switch ( key = getch() ) {
// F. Arriba
case 72:
if( Linea > 0 ) {
setfillstyle(SOLID_FILL, BLANCO); // selecciona los atributos de
bar( X, Y+Linea*20, X1, Y+Linea*20 + 20); // relleno, y Borra el campo
setcolor(NEGRO); // devuelve el color a su estado
outtextxy( X, Y+Linea*20, s1 ); // e imprime la cadena.
Linea--;
s_tmp1 = s_tmp = s = s1 = SHerm.Comentario[Linea]; // inicio cadena
s += lmax; *s = '\0';
if ( Columna < strlen( s1 ) ) s_tmp += Columna; else { Columna = 0;
s_tmp = s1; }
s = s_tmp1 = s_tmp;
}
break;
// F. Abajo
case 80:
if( Linea < 5 ) {
setfillstyle(SOLID_FILL, BLANCO); // selecciona los atributos de
bar( X, Y+Linea*20, X1, Y+Linea*20 + 20); // relleno, y Borra el campo
setcolor(NEGRO); // devuelve el color a su estado
outtextxy( X, Y+Linea*20, s1 ); // e imprime la cadena.
Linea++;
s_tmp1 = s_tmp = s = s1 = SHerm.Comentario[Linea]; // inicio cadena
s += lmax; *s = '\0';
if ( Columna < strlen( s1 ) ) s_tmp += Columna; else { Columna = 0;
s_tmp = s1; }
s = s_tmp1 = s_tmp;
}
break;
// F. Derecha
case 77:
case 9:
if ( Columna < strlen(s1) ) { Columna++; s++; }
break;
// F. Izquierda
case 75:
case 11:
if ( Columna > 0) { Columna--; s--; }
break;
default:
break;
}
break;
// Back Space
case 8:
if ( Columna > 0 ) {
Columna--;
s--;
s_tmp1 = s_tmp = s;
while ( *s_tmp1 != NULL ) {
s_tmp1++;
*s_tmp = *s_tmp1;
s_tmp++;
}
}
break;
case 27:
ok = 1;
break;
default:
if ( key >= 32 && key <= 254 && Columna < lmax) {
*s++ = key;
Columna++;
}
break;
}
}while(!ok);
while(kbhit()) getch(); // Vacia Buffer impidiendo falsas
// pulsaciones...
setfillstyle(SOLID_FILL, BLANCO); // selecciona los atributos de
bar( X, Y+Linea*20, X1, Y+Linea*20 + 20); // relleno, y Borra el campo
setcolor(AZUL); // devuelve el color a su estado
outtextxy( X, Y+Linea*20, s1 ); // e imprime la cadena.
return /* de momento nada */ 0;
}
/**************************************************************************\
|* *|
|* ImprimeFicha *|
|* *|
|* Descripci¢n: *|
|* Imprime la ficha actual *|
|* *|
|* Entradas: (ninguna) *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void ImprimeFicha(void)
{
char buffer[80];
while ( !Comprueba_Impresora() )
{
if ( !Optar( 1, "ERROR IMPRESORA", "Encienda la impresora", "y pulse ACEPTAR para continuar", NULL ) )
return;
};
fprintf( stdprn, "\n\rÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿");
fprintf( stdprn, "\n\r³ Fichas de Hermanos ³");
fprintf( stdprn, "\n\rÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿");
fprintf( stdprn, "\n\r³ ³");
fprintf( stdprn, "\n\r³ Numero de Hermano: %5ld ³", SHerm.NHno );
fprintf( stdprn, "\n\r³ ³");
fprintf( stdprn, "\n\r³ Nombre: %-15s ³", SHerm.Nombre );
fprintf( stdprn, "\n\r³ ³");
sprintf( buffer, "%s %s", SHerm.Apellido1, SHerm.Apellido2 );
fprintf( stdprn, "\n\r³ Apellidos: %-30s ³", buffer );
fprintf( stdprn, "\n\r³ ³");
sprintf( buffer, "%s%s%s%s%s", SHerm.Direccion, (SHerm.Num[0]=='\0')?"":", num:", SHerm.Num, (SHerm.Piso[0]=='\0') ? "":", piso:", SHerm.Piso );
fprintf( stdprn, "\n\r³ Direccion: %-50s ³" );
fprintf( stdprn, "\n\r³ ³");
sprintf( buffer, "(%s)", SHerm.Provincia );
fprintf( stdprn, "\n\r³ CP: %05ld Poblaci¢n: %-15s %-17s ³", SHerm.CodP, SHerm.Poblacion, buffer );
fprintf( stdprn, "\n\r³ ³");
fprintf( stdprn, "\n\r³ ³");
fprintf( stdprn, "\n\r³ Fecha de Nacimiento: %02d-%02d-%04d Telefono 1: %-15s ³", (int)SHerm.FechaN.da_day, (int)SHerm.FechaN.da_mon, SHerm.FechaN.da_year, SHerm.Telefono1 );
fprintf( stdprn, "\n\r³ ³");
fprintf( stdprn, "\n\r³ Antig<69>edad: (%3d a¤os) %02d-%02d-%04d Telefono 2: %-15s ³", (FechaActual.da_year - SHerm.Antig.da_year), (int)SHerm.Antig.da_day, (int)SHerm.Antig.da_mon, SHerm.Antig.da_year, SHerm.Telefono1 );
fprintf( stdprn, "\n\r³ ³");
fprintf( stdprn, "\n\r³ Reserva: %-2s ³", (SHerm.Varios.Reserva == 0) ? "NO" : "SI" );
fprintf( stdprn, "\n\r³ ³");
fprintf( stdprn, "\n\r³ Posici¢n: %-15s ³", SHerm.Posicion );
fprintf( stdprn, "\n\r³ ³");
fprintf( stdprn, "\n\r³ Insignia: %-30s ³", Config.Insignia[SHerm.Insignia + 20*( (SHerm.Varios.CtoVirgen == 0) ? 0 : 1 ) ].NInsignia );
fprintf( stdprn, "\n\r³ ³");
fprintf( stdprn, "\n\rÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ");
fprintf( stdprn, "\n\r");
fprintf( stdprn, "\n\r");
fprintf( stdprn, "\n\r");
fprintf( stdprn, "\n\r");
fprintf( stdprn, "\n\r");
fprintf( stdprn, "\n\r");
fprintf( stdprn, "\n\r");
fprintf( stdprn, "\n\r");
fprintf( stdprn, "\n\r");
fprintf( stdprn, "\n\r");
fprintf( stdprn, "\n\r");
fprintf( stdprn, "\n\r");
fprintf( stdprn, "\n\r");
fprintf( stdprn, "\n\r");
fprintf( stdprn, "\n\r Observaciones:");
fprintf( stdprn, "\n\r");
fprintf( stdprn, "\n\r %s", SHerm.Comentario[0] );
fprintf( stdprn, "\n\r");
fprintf( stdprn, "\n\r %s", SHerm.Comentario[1] );
fprintf( stdprn, "\n\r");
fprintf( stdprn, "\n\r %s", SHerm.Comentario[2] );
fprintf( stdprn, "\n\r");
fprintf( stdprn, "\n\r %s", SHerm.Comentario[3] );
fprintf( stdprn, "\n\r");
fprintf( stdprn, "\n\r %s", SHerm.Comentario[4] );
fprintf( stdprn, "\n\r");
fprintf( stdprn, "\n\r %s", SHerm.Comentario[5] );
fprintf( stdprn, "\n\r");
fputc(12, stdprn);
}
// SOLO ACCESIBLE DESDE DENTRO
void PapeletaDeSitio(void)
{
// char CMen;
struct textsettingstype texttypeinfo;
// void *Imagen;
long CuotaSalida = 0;
char buffer[90]; int key, ok = 0, Impr;
/*
if ( (Imagen = malloc( imagesize(170, 165, 470, 315) ) ) == NULL )
return;
getimage( 170, 165, 470, 315, Imagen );
Imprime_Estaticos(20, "Herm.img");
*/
gettextsettings( &texttypeinfo );
/*
settextstyle( SMALL_FONT, HORIZ_DIR, 6 );
setcolor( BLANCO );
outtextxy( 172+((296 - textwidth( "Papeleta de Sitio" ) ) / 2 ), 165, "Papeleta de Sitio" );
setcolor( NEGRO );
rectangle( 172, 290, 272, 313 );
rectangle( 370, 290, 467, 313 );
sprintf( buffer, " Insignia: %s", Config.Insignia[ ( SHerm.Varios.CtoVirgen == 0 ? 0 : 1)*20 + SHerm.Insignia ].NInsignia );
outtextxy( 172, 200, buffer );
outtextxy( 172, 200+20*2, " Cuota de salida: ");
outtextxy( 172, 190+20*5, " (A)ceptar (C)ancelar");
*/
Impr = 0;
Optar( ENCUADRE, "Papeletas de sitio", "Introduzca cuota de salida", NULL );
setfillstyle( SOLID_FILL, BLANCO );
bar( 400, 250, 465, 270 );
do{
/*
Espera_TeclaRaton();
if ( !kbhit() )
{
if ( x_raton > 172 && x_raton < 272 && y_raton > 290 && y_raton < 313 )
{
if( CuotaSalida != 0 )
{
ImprimePapeleta(CuotaSalida);
putimage( 170, 165, Imagen, COPY_PUT );
free( Imagen );
ok=1;
}
} else
if ( x_raton > 370 && x_raton < 467 && y_raton > 290 && y_raton < 313 )
{
putimage( 170, 165, Imagen, COPY_PUT );
free( Imagen );
ok = 1;
}
}
else
*/
switch ( Comprueba_Secuencia( SEC_OPTAR, NULL ) )
{
case 0:
case -1:
while( kbhit() ) getch();
break;
case -2:
if ( (key=getch() ) != 13 )
ungetch(key);
sprintf( buffer, "%ld", CuotaSalida );
if ( !( InputCadenaG_T5( buffer, 1, 5, BLANCO, AZUL, 400, 250, 465, 270 ) >> 8 ) )
{
CuotaSalida = atol( buffer );
setfillstyle( SOLID_FILL, BLANCO );
bar( 400, 250, 465, 270 );
setcolor( NEGRO );
outtextxy( 400, 250, buffer );
}
break;
// Aceptar
case 1:
Impr = ok = 1;
break;
// Cancelar
case 2:
ok=1;
break;
}
/*
switch( key = getch() )
{
// ESC
case 27:
// putimage( 170, 165, Imagen, COPY_PUT );
// free( Imagen );
ok = 1;
break;
case 0:
switch( getch() )
{
// A
case 30:
if( CuotaSalida != 0 )
{
ImprimePapeleta(CuotaSalida);
// putimage( 170, 165, Imagen, COPY_PUT );
// free( Imagen );
ok=1;
}
break;
// C
case 46:
// putimage( 170, 165, Imagen, COPY_PUT );
// free( Imagen );
ok=1;
break;
}
break;
default:
ungetch(key);
case 13:
sprintf( buffer, "%ld", CuotaSalida );
if ( !( InputCadenaG_T5( buffer, 1, 5, BLANCO, AZUL, 400, 240, 465, 260 ) >> 8 ) )
{
CuotaSalida = atol( buffer );
setfillstyle( SOLID_FILL, BLANCO );
bar( 400, 240, 465, 260 );
setcolor( NEGRO );
outtextxy( 400, 240, buffer );
}
break;
}
*/
}while(!ok);
Optar( ENCUADRE, "Papeletas de sitio", "Introduzca cuota de salida", NULL );
if ( Impr == 1 )
ImprimePapeleta(CuotaSalida);
settextstyle( texttypeinfo.font, texttypeinfo.direction, texttypeinfo.charsize );
HighLight( 17, BLANCO, NEGRO );
}
void ImprimePapeleta(long CuotaSalida)
{
char Mes[12][15] = { "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" };
// Imprimimos la papeleta de sitio
while ( !Comprueba_Impresora() )
{
if ( !Optar( 1, "ERROR IMPRESORA", "Encienda la impresora", "y pulse ACEPTAR para continuar", NULL ) )
return;
};
fprintf( stdprn, "\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r" );
fprintf( stdprn, " %s %s %s\n\r\n\r", SHerm.Nombre, SHerm.Apellido1, SHerm.Apellido2 );
fprintf( stdprn, " %s%s%s%s\n\r",SHerm.Direccion, (SHerm.Num[0]=='\0')?"":", ", SHerm.Num, (SHerm.Piso[0]=='\0') ? "":", ", SHerm.Piso );
fprintf( stdprn, " %s", Config.Insignia[SHerm.Insignia + 20*( (SHerm.Varios.CtoVirgen == 0) ? 0 : 1 ) ].NInsignia );
fprintf( stdprn, "\n\r\n\r\n\r" );
fprintf( stdprn, " %s\n\r\n\r", Config.HoraSalida );
fprintf( stdprn, " %2d %12s %2d\n\r", FechaActual.da_day, Mes[FechaActual.da_mon], ( FechaActual.da_year - (FechaActual.da_year / 100 ) * 100 ) );
fprintf( stdprn, "\n\r\n\r\n\r" );
fprintf( stdprn, " #%ld#", CuotaSalida );
fputc(12, stdprn );
SHerm.Varios.RealPenit = 1;
BHerm.EscribeReg( (void*)&SHerm, BHerm.RegActual() );
}
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛ Û ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ Û ÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ Û ÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ Û ÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ Û ÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛ ÛÛÛÛÛÛ Û ÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛ ÛÛÛÛ ÛÛ ÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛ ÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
//ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
/**************************************************************************\
|* *|
|* MuestraAyudaHerm *|
|* *|
|* Descripci¢n: *|
|* Muestra una peque¤a descripcion del contenido para el campo *|
|* *|
|* Entradas: *|
|* columna campo ha mostar su ayuda *|
|* *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void MuestraAyudaHerm( char columna )
{
char buffer1[80];
switch( columna )
{
// N§ de Hermano
case 0:
sprintf ( buffer1, "N§ de hermano/a, que esta visionando" );
break;
// Nombre
case 1:
sprintf ( buffer1, "Nombre del hermano/a" );
break;
// Apellido1
case 2:
sprintf ( buffer1, "Primer Apellido del hermano/a" );
break;
// Apellido2
case 3:
sprintf ( buffer1, "Segundo Apellido del hermano/a" );
break;
// Direccion
case 4:
sprintf ( buffer1, "Direcci¢n del hermano/a" );
break;
// Numero
case 5:
sprintf ( buffer1, "N£mero, Plaza, Bloque" );
break;
// Piso
case 6:
sprintf ( buffer1, "Escalera, Letra de Piso/Casa" );
break;
// C.P.
case 7:
sprintf ( buffer1, "C¢digo Postal" );
break;
// Poblacion
case 8:
sprintf ( buffer1, "Poblaci¢n" );
break;
// Provincia
case 9:
sprintf ( buffer1, "Provincia" );
break;
// Fecha de Nacimiento
case 10:
sprintf ( buffer1, "Fecha de nacimiento" );
break;
// Fecha de Alta
case 11:
sprintf ( buffer1, "Fecha de alta en esta Hermandad" );
break;
// Reserva
case 12:
sprintf ( buffer1, "Reserva" );
break;
// Posicion
case 13:
sprintf ( buffer1, "Poscion" );
break;
// Insignia
case 14:
sprintf ( buffer1, "Insignia con la que realizar  penitencia" );
break;
// Telefono1
case 15:
sprintf ( buffer1, "Telefono particular del hermano/a" );
break;
// Telefono2
case 16:
sprintf ( buffer1, "Telefono de contacto / fax" );
break;
// Estacion Penitencia
case 17:
sprintf ( buffer1, "¨ Realizar  la estaci¢n de penitencia ?" );
break;
// Acogido a Cuota
case 18:
sprintf ( buffer1, "¨ Esta acogido a cuota familiar ?" );
break;
// Tiene Posibilidad de votar
case 19:
sprintf ( buffer1, "¨ Tiene posibilidad de votar ?" );
break;
// Recibe notificaciones
case 20:
sprintf ( buffer1, "¨ Recibe notificaciones ?" );
break;
// Posee tunica de propiedad
case 21:
sprintf ( buffer1, "¨ Es la t£nica de la hermandad ?" );
break;
// N§ de la tunica
case 22:
sprintf ( buffer1, "N£mero de tunica, ( 0 == HDAD )" );
break;
// Cristo / Virgen
case 23:
case 24:
sprintf ( buffer1, "Realizar  penitencia en Cristo o Virgen" );
break;
// Comentario
case 25:
sprintf ( buffer1, "Observaciones con respecto al hno/a" );
break;
}
// Ayuda reducida
setfillstyle( SOLID_FILL, EGA_BLACK ); bar( 7, 457, 498, 473 );
// Imprime la ayudita
setcolor( EGA_WHITE ); outtextxy( 7, 457, buffer1 );
}
// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
// Û Parte secundaria del m¢dulo Û
// Û Û
// Û Secci¢n de Busqueda de hermanos Û
// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
// ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
// Û Parte secundaria del m¢dulo Û
// Û Û
// Û Secci¢n de Busqueda de refecencias Û
// ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
/**************************************************************************\
|* *|
|* BuscaItem *|
|* *|
|* Descripci¢n: *|
|* Busca una referencia por su n§ o descripcion *|
|* *|
|* Entradas: *|
|* ATRAS Busca otra coincidencia hacia atras *|
|* NUEVA_BUSQUEDA Inicia una nueva busqueda *|
|* ADELANTE Busca otra coincidencia hacia delante *|
|* *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void BuscaItem( char TipoBusqueda )
{
static HermStruct BuscaHerm;
char enc; long i;
switch ( TipoBusqueda )
{
case DESDE_EL_PRINCIPIO://NUEVA_BUSQUEDA:
if ( ObtenMatchHerm( &BuscaHerm ) != OK )
return;
i = 0;
break;
case HACIA_ATRAS:
case HACIA_ADELANTE:
i = CurrReg + TipoBusqueda;
if ( i < 0 ) i = 0;
break;
}
Optar( ENCUADRE, "Comando: Buscar", "Ahora se inica", "la busqueda elegida", NULL );
enc = 0;
while ( i < BHerm.Registros() && !enc )
{
if ( BHerm.LeeReg( (void *)&SHerm, i ) == ERROR )
Error( BHerm.cError );
if ( Match_Herm( SHerm, BuscaHerm ) )
enc = 1;
else
i++;
}
Optar( ENCUADRE, NULL );
if ( enc )
{
CurrReg = i;
} else
switch( TipoBusqueda )
{
case DESDE_EL_PRINCIPIO://NUEVA_BUSQUEDA:
Optar( 0, "Comando: Buscar", "No se encontr¢", "ninguna coincidencia", NULL );
break;
case HACIA_ATRAS:
case HACIA_ADELANTE:
Optar( 0, "Comando: Buscar", "No se encontr¢", "ninguna coincidencia", NULL );
break;
}
if ( BHerm.LeeReg( (void *)&SHerm, CurrReg ) == ERROR )
Error( BHerm.cError);
MuestraDatos();
MuestraFotografia();
}
/**************************************************************************\
|* *|
|* Match_Herm *|
|* *|
|* Descripci¢n: *|
|* Compara dos registros y devuelve la posible coincidencia *|
|* *|
|* Entradas: *|
|* Registros a comparar *|
|* *|
|* Salidas: *|
|* Resultado de la comparaci¢n *|
|* *|
\**************************************************************************/
int Match_Herm( HermStruct A, HermStruct B )
{
// Solo comprueba estos topicos...
if ( B.NHno != 0 )
return ( B.NHno == A.NHno );
// Nombre
if ( B.Nombre[0] != '\0' )
{
if ( strncmpi( B.Nombre, A.Nombre, strlen( B.Nombre ) ) != 0 )
return 0;
}
// Apellido 1
if ( B.Apellido1[0] != '\0' )
{
if ( strncmpi( B.Apellido1, A.Apellido1, strlen( B.Apellido1 ) ) != 0 )
return 0;
}
// Apellido 2
if ( B.Apellido2[0] != '\0' )
{
if ( strncmpi( B.Apellido2, A.Apellido2, strlen( B.Apellido2 ) ) != 0 )
return 0;
}
// Direccion
if ( B.Direccion[0] != '\0' )
{
if ( strncmpi( B.Direccion, A.Direccion, strlen( B.Direccion ) ) != 0 )
return 0;
}
// Poblacion
if ( B.Poblacion[0] != '\0' )
{
if ( strncmpi( B.Poblacion, A.Poblacion, strlen( B.Poblacion ) ) != 0 )
return 0;
}
// Telefono 1
if ( B.Telefono1[0] != '\0' )
{
if ( strncmpi( B.Telefono1, A.Telefono1, strlen( B.Telefono1 ) ) != 0 )
return 0;
}
// FechaN
if ( B.FechaN.da_year != 0 )
{
if ( B.FechaN.da_year != A.FechaN.da_year )
return 0;
}
// Antiguedad
if ( B.Antig.da_year != 0 )
{
if ( B.Antig.da_year != A.Antig.da_year )
return 0;
}
// Vale tio, has pasado todos los controles
return 1;
}
/**************************************************************************\
|* *|
|* ObtenMatchHerm *|
|* *|
|* Descripci¢n: *|
|* Obtine los patrones de busqueda necesarios *|
|* *|
|* Entradas: *|
|* Estructura donde guardar el patron de busqueda *|
|* *|
|* Salidas: *|
|* OK La entrada es correcta *|
|* ERROR El usuario interrumpio la busqueda *|
|* *|
\**************************************************************************/
int ObtenMatchHerm( HermStruct *BuscaHerm )
{
char Row, ok, i;
int BPush, key, DEV;
struct textsettingstype texttypeinfo;
gettextsettings( &texttypeinfo );
Optar( ENCUADRE, "Comando: Buscar", NULL );
Imprime_Estaticos( 300, "herm.img" );
ok = 0; Row = 0;
HermNuevoRegistro( BuscaHerm );
do
{
MatchDrawRef(Row, *BuscaHerm, INTENSO);
BPush = Comprueba_Secuencia( SEC_OPTAR, NULL );
MatchDrawRef(Row, *BuscaHerm, NORMAL);
switch ( BPush )
{
case 0: // No se pulso ningun BOTON
while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER
case -2:
if ( ( key = getch() ) != 13 && key != 27 )
ungetch( key );
EditMatchRef( Row, BuscaHerm );
for ( i=0; i < 6; i++ )
MatchDrawRef(i, *BuscaHerm, NORMAL);
break;
case -1:
switch ( getch() )
{
// Flecha Izquierda
case 75:
case 15:
// Flecha Arriba
case 72:
Row--; if ( Row < 0 ) Row = 7;
break;
// Flecha Derecha
case 77:
case 9:
// Flecha Abajo
case 80:
Row++; if ( Row > 7 ) Row = 0;
break;
}
break;
case 1:
DEV = OK; ok = 1;
break;
case 2:
DEV = ERROR; ok = 1;
break;
}
} while ( !ok );
Optar( ENCUADRE, NULL );
settextstyle( texttypeinfo.font, texttypeinfo.direction, texttypeinfo.charsize );
return DEV;
}
/**************************************************************************\
|* *|
|* EditMatchRef *|
|* *|
|* Descripci¢n: *|
|* Edita el patron de busqueda *|
|* *|
|* Entradas: *|
|* Campo a editar, y lugar donde almacenarlo *|
|* *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void EditMatchRef( char Row, HermStruct * BuscaHerm )
{
int X0, Y0, X1, Y1;
char buffer[80];
ObtenCoordenadasMatch( Row, &X0, &Y0, &X1, &Y1 );
switch( Row )
{
case 0:
sprintf( buffer, "%ld", BuscaHerm -> NHno );
if ( !( InputCadenaG_T5( buffer, 1, 4, BLANCO, AZUL, X0, Y0, X1, Y1) >> 8 ) )
{
HermNuevoRegistro( BuscaHerm );
BuscaHerm -> NHno = atol(buffer);
}
break;
case 1:
strcpy( buffer, BuscaHerm -> Telefono1 );
if ( !( InputCadenaG_T5( buffer, 0, 12, BLANCO, AZUL, X0, Y0, X1, Y1) >> 8 ) )
{
strcpy ( BuscaHerm -> Telefono1, buffer );
}
break;
case 2:
strcpy( buffer, BuscaHerm -> Nombre );
if ( !( InputCadenaG_T5( buffer, 0, 12, BLANCO, AZUL, X0, Y0, X1, Y1) >> 8 ) )
{
strcpy ( BuscaHerm -> Nombre, buffer );
}
break;
case 3:
strcpy( buffer, BuscaHerm -> Apellido1 );
if ( !( InputCadenaG_T5( buffer, 0, 12, BLANCO, AZUL, X0, Y0, X1, Y1) >> 8 ) )
{
strcpy ( BuscaHerm -> Apellido1, buffer );
}
break;
case 4:
strcpy( buffer, BuscaHerm -> Apellido2 );
if ( !( InputCadenaG_T5( buffer, 0, 12, BLANCO, AZUL, X0, Y0, X1, Y1) >> 8 ) )
{
strcpy ( BuscaHerm -> Apellido2, buffer );
}
break;
case 5:
strcpy( buffer, BuscaHerm -> Direccion );
if ( !( InputCadenaG_T5( buffer, 0, 25, BLANCO, AZUL, X0, Y0, X1, Y1) >> 8 ) )
{
strcpy ( BuscaHerm -> Direccion, buffer );
}
break;
case 6:
sprintf( buffer, "%02d%02d%04d", (int)BuscaHerm -> FechaN.da_day
, (int)BuscaHerm -> FechaN.da_mon
, (int)BuscaHerm -> FechaN.da_year );
if ( !( InputCadenaG_T5( buffer, 1, 8, BLANCO, AZUL, X0, Y0, X1, Y1 ) >> 8 ) )
{
if ( buffer[0] == '\0' )
{
BuscaHerm -> FechaN.da_day = 0;
BuscaHerm -> FechaN.da_mon = 0;
BuscaHerm -> FechaN.da_year = 0;
} else {
BuscaHerm -> FechaN.da_day = (buffer[0]-'0')*10+(buffer[1]-'0');
BuscaHerm -> FechaN.da_mon = (buffer[2]-'0')*10+(buffer[3]-'0');
BuscaHerm -> FechaN.da_year = (buffer[4]-'0')*1000+(buffer[5]-'0')*100+(buffer[6]-'0')*10+(buffer[7]-'0');
}
}
break;
case 7:
sprintf( buffer, "%02d%02d%04d", (int)BuscaHerm -> Antig.da_day
, (int)BuscaHerm -> Antig.da_mon
, (int)BuscaHerm -> Antig.da_year );
if ( !( InputCadenaG_T5( buffer, 1, 8, BLANCO, AZUL, X0, Y0, X1, Y1 ) >> 8 ) )
{
if ( buffer[0] == '\0' )
{
BuscaHerm -> Antig.da_day = 0;
BuscaHerm -> Antig.da_mon = 0;
BuscaHerm -> Antig.da_year = 0;
} else {
BuscaHerm -> Antig.da_day = (buffer[0]-'0')*10+(buffer[1]-'0');
BuscaHerm -> Antig.da_mon = (buffer[2]-'0')*10+(buffer[3]-'0');
BuscaHerm -> Antig.da_year = (buffer[4]-'0')*1000+(buffer[5]-'0')*100+(buffer[6]-'0')*10+(buffer[7]-'0');
}
}
break;
}
}
/**************************************************************************\
|* *|
|* MatchDrawRef *|
|* *|
|* Descripci¢n: *|
|* Escribe los distintos campos seg£n se le indique *|
|* *|
|* Entradas: *|
|* Campo a mostrar, lugar donde se encuentra, y como mostrarlo *|
|* *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void MatchDrawRef( char Row, HermStruct BuscaHerm, char como )
{
int X0, Y0, X1, Y1;
char buffer[80];//, buffer1[80];
ObtenCoordenadasMatch( Row, &X0, &Y0, &X1, &Y1 );
switch( Row )
{
case 0:
sprintf( buffer, "%4ld", BuscaHerm.NHno );
break;
case 1:
sprintf( buffer, "%12s", BuscaHerm.Telefono1 );
break;
case 2:
sprintf( buffer, "%12s", BuscaHerm.Nombre );
break;
case 3:
sprintf( buffer, "%12s", BuscaHerm.Apellido1 );
break;
case 4:
sprintf( buffer, "%12s", BuscaHerm.Apellido2 );
break;
case 5:
sprintf( buffer, "%25s", BuscaHerm.Direccion );
break;
case 6:
sprintf( buffer, "%02d-%02d-%04d", (int)BuscaHerm.FechaN.da_day, (int)BuscaHerm.FechaN.da_mon, BuscaHerm.FechaN.da_year );
break;
case 7:
sprintf( buffer, "%02d-%02d-%04d", (int)BuscaHerm.Antig.da_day, (int)BuscaHerm.Antig.da_mon, BuscaHerm.Antig.da_year );
break;
}
setfillstyle( SOLID_FILL, ( como == NORMAL ) ? EGA_WHITE : EGA_RED );
bar( X0, Y0, X1, Y1 );
setcolor ( ( como == NORMAL ) ? EGA_BLACK : EGA_WHITE );
outtextxy( X0+2, Y0, buffer );
}
/**************************************************************************\
|* *|
|* MatchDrawRef *|
|* *|
|* Descripci¢n: *|
|* Obtiene las coordenadas relativas al campo dado. *|
|* *|
|* Entradas: *|
|* Campo a obtener las coordenadas, y coordenadas de salida *|
|* *|
|* Salidas: (ninguna) *|
|* *|
\**************************************************************************/
void ObtenCoordenadasMatch( char Row, int *X0, int *Y0, int *X1, int *Y1 )
{
switch( Row )
{
case 0:
*X0 = 255; *X1 = 310;
*Y0 = 199; *Y1 = 217;
break;
case 1:
*X0 = 365; *X1 = 465;
*Y0 = 199; *Y1 = 217;
break;
case 2:
*X0 = 255; *X1 = 360;
*Y0 = 219; *Y1 = 237;
break;
case 3:
*X0 = 255; *X1 = 360;
*Y0 = 239; *Y1 = 257;
break;
case 4:
*X0 = 365; *X1 = 465;
*Y0 = 239; *Y1 = 257;
break;
case 5:
*X0 = 255; *X1 = 465;
*Y0 = 259; *Y1 = 277;
break;
case 6:
*X0 = 225; *X1 = 320;
*Y0 = 279; *Y1 = 297;
break;
case 7:
*X0 = 365; *X1 = 465;
*Y0 = 279; *Y1 = 297;
break;
}
(*X0) ++; (*Y0) ++;
(*X1) --; (*Y1) --;
}
void HermNuevoRegistro( HermStruct *NHerm )
{
NHerm -> NHno = 0;
NHerm -> Nombre[0] = '\0';
NHerm -> Apellido1[0] = '\0';
NHerm -> Apellido2[0] = '\0';
NHerm -> Direccion[0] = '\0';
NHerm -> Telefono1[0] = '\0';
NHerm -> FechaN.da_day = 0;
NHerm -> FechaN.da_mon = 0;
NHerm -> FechaN.da_year= 0;
NHerm -> Antig.da_day = 0;
NHerm -> Antig.da_mon = 0;
NHerm -> Antig.da_year = 0;
}