497 lines
14 KiB
C++
497 lines
14 KiB
C++
/**************************************************************************\
|
||
|* *|
|
||
|* 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 <dos.h>
|
||
#include <conio.h>
|
||
#include <alloc.h>
|
||
#include <graphics.h>
|
||
#include "..\libs\make_bot\make_bot.h"
|
||
|
||
#undef MB_TeclaPulsada()
|
||
#define MB_TeclaPulsada() kbhit()
|
||
|
||
#include <stdio.h>
|
||
|
||
#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 );
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|