/**************************************************************************\ |* *| |* Menus *| |* *| |* Descripci¢n: *| |* M¢dulo encargado de generar menus, una vez se le pasa *| |* el puntero a la estructura definida. *| |* *| |* Fecha: 21-07-96 14.34 / 18.00 *| |* 23.13 / 00.30 *| \**************************************************************************/ #include #include #include #include #include "..\libs\make_bot\make_bot.h" #undef MB_TeclaPulsada() #define MB_TeclaPulsada() kbhit() #include #include "herm.h" #include "..\libs\bdatos\bdatos.hh" #define CONTRAIDO 0 #define EXPANDIDO 1 extern unsigned _stklen = 18432U; extern BDatos BConfig; extern int far Espera_TeclaRaton(void); void ErrorOccurred(int errorcode); int Topicos = 5; int SubTopicos[] = { 3, 4, 4, 9, 3 }; void far *Fondo_Menu; int xST, yST; char *email="Jose-David.Guillen@cs.us.es"; int MenuPrincipal(void); void ContraeMenu(void); void ExpandeMenu( int Menu ); void SeleccionaTopico(int Topico, char color); void SeleccionaSubTopico( int Topico, int SubTopico, int color ); void CheckRaton_Topic(int *Topico, int *SubTopico, int *Menu); int GestionHermanos( char HnoHna, int Accion ); void LeeConfiguracion(void); void OrdenaBase( char HnoHna ); void GestionInsignias(void); void ListadosRapidos( int Tipo_de_Listado ); void ConfiguracionGlobal(void); void Imprime_Dibujo(void); int handler(int errval,int ax,int bp,int si); void main(void) { int Item; struct date FechaActual; getdate( &FechaActual ); if ( carga_botones( "Herm.img" ) != OK ) return; LeeConfiguracion(); Initialize( 9, 2 ); // Inicializa el Modo Gr fico harderr(handler); True_Push = ON; PunteroRaton = 1; inicializa_raton_grafico( 0, 0, 639, 479 ); while(1){ Item = MenuPrincipal(); switch ( Item>>8 ) { // Archivo case 1: switch( Item & 0x00FF ) { // Configuracion case 1: ConfiguracionGlobal(); break; // Mantenimiento case 2: GestionInsignias(); break; case 3: BConfig.CerrarReg(); closegraph(); printf("\nJos‚ David Guill‚n || _-ùFuTuRe ViSiOnù-_ "); printf("\n\ne-mail: %s\n", email); return; } break; // Hermanos / Hermanas case 2: case 3: switch( Item & 0x00FF ) { // Altas case ALTAS: if ( ( Item >> 8 ) == 2 ) GestionHermanos( HERMANOS, ALTAS ); else GestionHermanos( HERMANAS, ALTAS ); break; // Bajas case BAJAS: if ( ( Item >> 8 ) == 2 ) GestionHermanos( HERMANOS, BAJAS ); else GestionHermanos( HERMANAS, BAJAS ); break; // Consultas / Modificaciones case CONSULTAS: if ( ( Item >> 8 ) == 2 ) GestionHermanos( HERMANOS, CONSULTAS ); else GestionHermanos( HERMANAS, CONSULTAS ); break; case REORDENAR: if ( ( Item >> 8 ) == 2 ) OrdenaBase( HERMANOS ); else OrdenaBase( HERMANAS ); break; } break; // Listados case 4: ListadosRapidos( ( Item & 0x00FF ) ); break; // Ayuda case 5: Optar( 0, "Acerca de...", "Programa realizado por:", "Jos‚ David Guill‚n || 1996", "e-mail:", "Jose-David.Guillen@cs.us.es", NULL ); break; } }; } //þþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþ int MenuPrincipal(void) { int Menu = CONTRAIDO; int Topico = 0, SubTopico = 0, ok=0; // Memoria para el cuadro mas grande que coja if ( ( Fondo_Menu = farmalloc( (long)(64000L/*+4*/) ) ) == NULL ) Error( "No hay suficiente memoria" ); // Imprime men£ principal Imprime_Estaticos(10, "herm.img"); Imprime_Dibujo(); settextstyle( SMALL_FONT, HORIZ_DIR, 6 ); SeleccionaTopico( Topico, EGA_RED ); do { Espera_TeclaRaton(); if ( !kbhit() ) CheckRaton_Topic(&Topico, &SubTopico, &Menu); else switch( getch() ) { // Intro case 13: if ( Menu == CONTRAIDO ) { Menu = EXPANDIDO; ExpandeMenu( Topico ); SubTopico = 0; SeleccionaSubTopico( Topico, SubTopico, EGA_RED ); } else { ContraeMenu(); ok = 1; } break; // Esc case 27: if ( Menu == EXPANDIDO ) { Menu = CONTRAIDO; ContraeMenu(); } break; case 0: switch( getch() ) { // Flecha Izquierda case 75: case 15: if ( Menu != CONTRAIDO ) ContraeMenu(); SeleccionaTopico( Topico, EGA_LIGHTGRAY ); Topico--; if ( Topico<0 ) Topico = Topicos-1; SeleccionaTopico( Topico, EGA_RED ); SubTopico = 0; if ( Menu != CONTRAIDO ) { ExpandeMenu( Topico ); SeleccionaSubTopico( Topico, SubTopico, EGA_RED ); } break; // Flecha Derecha case 77: case 9: if ( Menu != CONTRAIDO ) ContraeMenu(); SeleccionaTopico( Topico, EGA_LIGHTGRAY ); Topico++; if ( Topico>=Topicos ) Topico = 0; SeleccionaTopico( Topico, EGA_RED ); SubTopico = 0; if ( Menu != CONTRAIDO ) { ExpandeMenu( Topico ); SeleccionaSubTopico( Topico, SubTopico, EGA_RED ); } break; // Flecha Arriba case 72: if ( Menu == EXPANDIDO ) { SeleccionaSubTopico( Topico, SubTopico, EGA_LIGHTGRAY ); SubTopico--; if ( SubTopico < 0 ) SubTopico = SubTopicos[Topico]-1; SeleccionaSubTopico( Topico, SubTopico, EGA_RED ); } break; // Flecha Abajo case 80: if ( Menu == EXPANDIDO ) { SeleccionaSubTopico( Topico, SubTopico, EGA_LIGHTGRAY ); SubTopico++; if ( SubTopico >= SubTopicos[Topico] ) SubTopico = 0; SeleccionaSubTopico( Topico, SubTopico, EGA_RED ); } else { Menu = EXPANDIDO; ExpandeMenu( Topico ); SubTopico = 0; SeleccionaSubTopico( Topico, SubTopico, EGA_RED ); } break; } break; } }while(!ok); farfree( Fondo_Menu ); return ( (Topico+1)<<8 )+(SubTopico+1); } void CheckRaton_Topic(int *Topico, int *SubTopico, int *Menu) { // Men£ principal if ( y_raton > 9 && y_raton < 27 ) { if ( x_raton > 8 && x_raton < 90 && *Topico != 0 ) { ContraeMenu(); SeleccionaTopico( *Topico, EGA_LIGHTGRAY ); *Topico = 0; *SubTopico = 0; *Menu = EXPANDIDO; ExpandeMenu( *Topico ); SeleccionaTopico( *Topico, EGA_RED ); SeleccionaSubTopico( *Topico, *SubTopico, EGA_RED ); } else if ( x_raton > 105 && x_raton < 197 && *Topico != 1 ) { ContraeMenu(); SeleccionaTopico( *Topico, EGA_LIGHTGRAY ); *Topico = 1; *SubTopico = 0; *Menu = EXPANDIDO; ExpandeMenu( *Topico ); SeleccionaTopico( *Topico, EGA_RED ); SeleccionaSubTopico( *Topico, *SubTopico, EGA_RED ); } else if ( x_raton > 215 && x_raton < 307 && *Topico != 2 ) { ContraeMenu(); SeleccionaTopico( *Topico, EGA_LIGHTGRAY ); *Topico = 2; *SubTopico = 0; *Menu = EXPANDIDO; ExpandeMenu( *Topico ); SeleccionaTopico( *Topico, EGA_RED ); SeleccionaSubTopico( *Topico, *SubTopico, EGA_RED ); } else if ( x_raton > 325 && x_raton < 412 && *Topico != 3 ) { ContraeMenu(); SeleccionaTopico( *Topico, EGA_LIGHTGRAY ); *Topico = 3; *SubTopico = 0; *Menu = EXPANDIDO; ExpandeMenu( *Topico ); SeleccionaTopico( *Topico, EGA_RED ); SeleccionaSubTopico( *Topico, *SubTopico, EGA_RED ); } else if ( x_raton > 560 && x_raton < 630 && *Topico != 4 ) { ContraeMenu(); SeleccionaTopico( *Topico, EGA_LIGHTGRAY ); *Topico = 4; *SubTopico = 0; *Menu = EXPANDIDO; ExpandeMenu( *Topico ); SeleccionaTopico( *Topico, EGA_RED ); SeleccionaSubTopico( *Topico, *SubTopico, EGA_RED ); } } } void SeleccionaTopico(int Topico, char color) { setcolor( color ); switch( Topico ) { case 0: rectangle( 8, 9, 90, 27 ); break; case 1: rectangle( 105, 9, 197, 27 ); break; case 2: rectangle( 215, 9, 307, 27 ); break; case 3: rectangle( 325, 9, 412, 27 ); break; case 4: rectangle( 560, 9, 630, 27 ); break; } } void SeleccionaSubTopico( int Topico, int SubTopico, int color ) { setcolor( color ); switch( Topico ) { case 0: if ( SubTopico == 2 ) rectangle( 8, 40+20*3, 157, 40+20*4 ); else rectangle( 8, 40+20*SubTopico, 157, 40+20*( SubTopico + 1 ) ); break; case 1: if ( SubTopico == 3 ) rectangle( 108, 40+20*4, 257, 40+20*5 ); else rectangle( 108, 40+20*SubTopico, 257, 40+20*(SubTopico+1) ); break; case 2: if ( SubTopico == 3 ) rectangle( 218, 40+20*4, 367, 40+20*5 ); else rectangle( 218, 40+20*SubTopico, 367, 40+20*( SubTopico + 1 ) ); break; case 3: rectangle( 328, 40+20*SubTopico, 482, 40+20*( SubTopico + 1 ) ); break; case 4: rectangle( 483, 40+20*SubTopico, 627, 40+20*( SubTopico + 1 ) ); break; } } //þþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþ void ExpandeMenu( int Menu ) { switch( Menu ) { case 0: xST = 5; yST = 35; getimage( 5, 35, 160, 40+20*4+5, Fondo_Menu ); setfillstyle(SOLID_FILL, EGA_LIGHTGRAY); bar( 5, 35, 160, 40+20*4+5 ); setcolor( EGA_BLACK ); rectangle( 5, 35, 160, 40+20*4+5 ); setcolor( EGA_BLUE ); outtextxy( 8, 40+20*0, " Configuracion" ); outtextxy( 8, 40+20*1, " Insignias " ); outtextxy( 8, 40+20*2, " -------------" ); outtextxy( 8, 40+20*3, " ( Salir ) " ); break; case 1: xST = 105; yST = 35; getimage( 105, 35, 260, 40+20*5+5, Fondo_Menu ); setfillstyle(SOLID_FILL, EGA_LIGHTGRAY); bar( 105, 35, 260, 40+20*5+5 ); setcolor( EGA_BLACK ); rectangle( 105, 35, 260, 40+20*5+5 ); setcolor( EGA_BLUE ); outtextxy( 105, 40+20*0, " Altas de Hnos" ); outtextxy( 105, 40+20*1, " Bajas de Hnos" ); outtextxy( 105, 40+20*2, " Consul/Modif." ); outtextxy( 105, 40+20*3, " -------------" ); outtextxy( 105, 40+20*4, " Reordenar Hns" ); break; case 2: xST = 215; yST = 35; getimage( 215, 35, 370, 40+20*5+5, Fondo_Menu ); setfillstyle(SOLID_FILL, EGA_LIGHTGRAY); bar( 215, 35, 370, 40+20*5+5 ); setcolor( EGA_BLACK ); rectangle( 215, 35, 370, 40+20*5+5 ); setcolor( EGA_BLUE ); outtextxy( 215, 40+20*0, " Altas de Hnos" ); outtextxy( 215, 40+20*1, " Bajas de Hnos" ); outtextxy( 215, 40+20*2, " Consul/Modif." ); outtextxy( 215, 40+20*3, " -------------" ); outtextxy( 215, 40+20*4, " Reordenar Hns" ); break; case 3: xST = 325; yST = 35; getimage( 325, 35, 485, 40+20*9+5, Fondo_Menu ); setfillstyle(SOLID_FILL, EGA_LIGHTGRAY); bar( 325, 35, 485, 40+20*9+5 ); setcolor( EGA_BLACK ); rectangle( 325, 35, 485, 40+20*9+5 ); setcolor( EGA_BLUE ); outtextxy( 325, 40+20*0, " Votantes " ); outtextxy( 325, 40+20*1, " Acogido a Cuota" ); outtextxy( 325, 40+20*2, " Rec. Notificac." ); outtextxy( 325, 40+20*3, " Papeletas de S." ); outtextxy( 325, 40+20*4, " Listado Hnos " ); outtextxy( 325, 40+20*5, " Fichas Hnos " ); outtextxy( 325, 40+20*6, " T£nicas Hdad. " ); outtextxy( 325, 40+20*7, " Facturas " ); outtextxy( 325, 40+20*8, " Etiquetas Dir. " ); break; case 4: xST = 480; yST = 35; getimage( 480, 35, 630, 40+20*3+5, Fondo_Menu ); setfillstyle(SOLID_FILL, EGA_LIGHTGRAY); bar( 480, 35, 630, 40+20*3+5 ); setcolor( EGA_BLACK ); rectangle( 480, 35, 630, 40+20*3+5 ); setcolor( EGA_BLUE ); outtextxy( 480, 40+20*0, " ------------" ); outtextxy( 480, 40+20*1, " Creditos " ); outtextxy( 480, 40+20*2, " Acerca de..." ); break; } } void ContraeMenu(void) { if ( Fondo_Menu != NULL ) putimage( xST, yST, Fondo_Menu, COPY_PUT ); } void Imprime_Dibujo(void) { FILE *fp; int alto, ancho; unsigned char byte; int contador; if ( ( fp = fopen ( "insignia.pcx", "rb" ) ) != NULL ) { // Saltamos la cabecera fseek( fp, 128, SEEK_SET ); for(alto=0; alto<128; alto++) { for(ancho=0; ancho<128; ) { byte=getc(fp); if(byte<=0xC0) { if ( byte != 255 ) putpixel( ancho+256, alto+270, byte ); ancho++; } else { contador=byte&0x3F; byte=getc(fp); for(; contador>0; contador--) { if ( byte != 255 ) putpixel( ancho+256, alto+270, byte ); ancho++; } } } } fclose( fp ); } }