/*************************************************************************\ |* *| |* HERM_GST *| |* *| |* Descripcin: *| |* Mdulo 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 #include #include #include #include #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 *| |* *| |* Descripcin: *| |* 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 todava 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 *| |* *| |* Descripcin: *| |* 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 *| |* *| |* Descripcin: *| |* 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 *| |* *| |* Descripcin: *| |* 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 *| |* *| |* Descripcin: *| |* 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 aos DifDate( FechaActual, SHerm.FechaN, NULL ) > 18 && /* ( FechaActual.da_year - SHerm.FechaN.da_year ) > 18 && // Mas de un ao 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 aos /* ( FechaActual.da_year - SHerm.FechaN.da_year ) > 18 && // Mas de un ao 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 ao 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 *| |* *| |* Descripcin: *| |* 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 *| |* *| |* Descripcin: *| |* 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 *| |* *| |* Descripcin: *| |* 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 *| |* *| |* Descripcin: *| |* 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 posicin 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 *| |* *| |* Descripcin: *| |* 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 *| |* *| |* Descripcin: *| |* 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 *| |* *| |* Descripcin: *| |* 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 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 *| |* *| |* Descripcin: *| |* 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 *| |* *| |* Descripcin: *| |* 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 todava 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 *| |* *| |* Descripcin: *| |* 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 Poblacin: %-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 Antigedad: (%3d aos) %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 Posicin: %-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 *| |* *| |* Descripcin: *| |* Muestra una pequea 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, "Direccin del hermano/a" ); break; // Numero case 5: sprintf ( buffer1, "Nmero, Plaza, Bloque" ); break; // Piso case 6: sprintf ( buffer1, "Escalera, Letra de Piso/Casa" ); break; // C.P. case 7: sprintf ( buffer1, "Cdigo Postal" ); break; // Poblacion case 8: sprintf ( buffer1, "Poblacin" ); 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 estacin 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 tnica de la hermandad ?" ); break; // N de la tunica case 22: sprintf ( buffer1, "Nmero 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 mdulo // // Seccin de Busqueda de hermanos // // // Parte secundaria del mdulo // // Seccin de Busqueda de refecencias // /**************************************************************************\ |* *| |* BuscaItem *| |* *| |* Descripcin: *| |* 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 *| |* *| |* Descripcin: *| |* Compara dos registros y devuelve la posible coincidencia *| |* *| |* Entradas: *| |* Registros a comparar *| |* *| |* Salidas: *| |* Resultado de la comparacin *| |* *| \**************************************************************************/ 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 *| |* *| |* Descripcin: *| |* 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 *| |* *| |* Descripcin: *| |* 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 *| |* *| |* Descripcin: *| |* Escribe los distintos campos segn 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 *| |* *| |* Descripcin: *| |* 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; }