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

497 lines
14 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.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**************************************************************************\
|* *|
|* 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 Guilln || _-ù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 Guilln || 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 );
}
}