First commit 11/11/1991
This commit is contained in:
341
FREC.CPP
Normal file
341
FREC.CPP
Normal file
@ -0,0 +1,341 @@
|
||||
#include <math.h> // Para getch();
|
||||
#include <dos.h> // Para getch();
|
||||
#include <stdio.h> // Para getch();
|
||||
#include <conio.h> // Para getch();
|
||||
#include <graphics.h> // Para outtextxy(...); y cleardevice(...);
|
||||
|
||||
#include "..\libs\make_bot\make_bot.h" // Fuciones de MAKE_BOTON
|
||||
|
||||
#define LINEFREC 2
|
||||
#define MatrizPoint 56
|
||||
#define BackGRID 0
|
||||
/*
|
||||
#define GRID_Y 6
|
||||
#define GRID_X 6
|
||||
*/
|
||||
#define GRID_Y 4
|
||||
#define GRID_X 4
|
||||
|
||||
#define PriGRID_Y 247
|
||||
#define PriGRID_X 11
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int x, y;
|
||||
char ndigitos;
|
||||
char AX, AY;
|
||||
char C1, C2, C3;
|
||||
} p_graphics;
|
||||
|
||||
|
||||
extern void Carga_Puntero(void);
|
||||
extern int Numero_Digital( long numero, p_graphics *ND );
|
||||
extern void Fuente_Amplia( char *Frase, p_graphics *FA );
|
||||
|
||||
int Espera_TeclaRatonFrec(void);
|
||||
//((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1), ( y_raton - ( PriGRID_Y - 8 ) )/GRID_Y )
|
||||
int PerfilX[4096];
|
||||
int oldPerfilX, oldPerfilY;
|
||||
|
||||
void TrazaPerfiles(void);
|
||||
void TrazaGrafica(void);
|
||||
|
||||
char cruz = 1;
|
||||
|
||||
int main(void){
|
||||
|
||||
p_graphics Numeros = { 20, 20, 6, 3, 3, EGA_RED, EGA_BLACK, EGA_DARKGRAY };
|
||||
p_graphics Letras = { 15, 102, 14, 1, 1, EGA_BLACK, EGA_RED, EGA_DARKGRAY };
|
||||
char Buffer[80];
|
||||
int numero=0;
|
||||
|
||||
float num = 0;
|
||||
for ( numero=0; numero < 640; numero++ )
|
||||
{
|
||||
num += 0.5;
|
||||
PerfilX[ numero ] = 15 + 10*sin( num );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Initialize( 9, 2 ); // Inicializa el Modo Gr<47>fico
|
||||
// carga_botones("Frec.img"); // Carga botones del fichero "Frec.img"
|
||||
|
||||
|
||||
Imprime_Estaticos( 1, "Frec.img"); // Imprime botones estaticos 'Seccion 1'
|
||||
/// Dibujamos la malla
|
||||
|
||||
|
||||
TrazaGrafica();
|
||||
|
||||
PunteroRaton = 1;
|
||||
inicializa_raton_grafico( 0, 0, 640, 480 );
|
||||
float vez=1, numerof=0;
|
||||
while( 1 )
|
||||
{
|
||||
Espera_TeclaRatonFrec();
|
||||
if ( cruz == 0 ) Anclar_Raton();
|
||||
|
||||
|
||||
// if ( y_raton >= (PriGRID_Y - 8) ) numero = 10101;
|
||||
Numero_Digital( numerof, &Numeros );
|
||||
|
||||
/*********************************************************************************************************\
|
||||
|***/ oldPerfilX = PerfilX[ ((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1) ]; /*|
|
||||
|**/ oldPerfilY = ((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1); /**|
|
||||
|*/ PerfilX[ ((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1) ] = ( y_raton - ( PriGRID_Y - 8 ) )/GRID_Y; /***|
|
||||
\*********************************************************************************************************/
|
||||
|
||||
TrazaPerfiles();
|
||||
switch ((int)(vez))
|
||||
{
|
||||
case 1:
|
||||
sprintf( Buffer, "X: %2d, Y: %2d |", ((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1), ( y_raton - ( PriGRID_Y - 8 ) )/GRID_Y );
|
||||
break;
|
||||
case 2:
|
||||
sprintf( Buffer, "X: %2d, Y: %2d |", ((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1), ( y_raton - ( PriGRID_Y - 8 ) )/GRID_Y );
|
||||
break;
|
||||
case 3:
|
||||
sprintf( Buffer, "X: %2d, Y: %2d |", ((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1), ( y_raton - ( PriGRID_Y - 8 ) )/GRID_Y );
|
||||
break;
|
||||
case 4:
|
||||
sprintf( Buffer, "X: %2d, Y: %2d |", ((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1), ( y_raton - ( PriGRID_Y - 8 ) )/GRID_Y );
|
||||
vez = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
if ( (int(vez*100))%100 == 0 )
|
||||
Fuente_Amplia( Buffer, &Letras );
|
||||
vez+=1;
|
||||
|
||||
|
||||
if( kbhit() )
|
||||
{
|
||||
switch( getch() )
|
||||
{
|
||||
case '+':
|
||||
numerof += 0.05;
|
||||
break;
|
||||
case '-':
|
||||
numerof -= 0.05;
|
||||
break;
|
||||
case 27:
|
||||
restorecrtmode();
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
num = 0;
|
||||
for ( numero=0; numero < 640; numero++ )
|
||||
{
|
||||
num += numerof;
|
||||
PerfilX[ numero ] = 15 + 10*sin( num );
|
||||
}
|
||||
TrazaGrafica();
|
||||
}
|
||||
|
||||
}
|
||||
// Imprime_Secuencia(1); // Imprime secuencia 1.
|
||||
|
||||
/*
|
||||
while(1){ // Bucle infinito
|
||||
|
||||
switch( Comprueba_Secuencia( 1 ) ) { // Iniciamos comprobacion
|
||||
|
||||
case 0: // No se pulso ningun BOTON
|
||||
while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER
|
||||
break;
|
||||
case -1: // Hay una tecla especial en BUFFER
|
||||
getch(); // La eliminamos
|
||||
break;
|
||||
case 1:
|
||||
Ayuda();
|
||||
cleardevice();
|
||||
Imprime_Estaticos( 1, "botones.p1"); // Devolvemos el aspecto inicial
|
||||
Imprime_Secuencia(1);
|
||||
break;
|
||||
case 2:
|
||||
restorecrtmode();
|
||||
return 0;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
*/
|
||||
getch();
|
||||
restorecrtmode();
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
int Espera_TeclaRatonFrec(void){
|
||||
|
||||
char Que;
|
||||
int bot_izq, bot_der;
|
||||
activa_raton();
|
||||
|
||||
//char cruz = 1;
|
||||
|
||||
do{
|
||||
asm mov AX, 3
|
||||
asm int 0x33
|
||||
asm mov x_raton, cx
|
||||
asm mov y_raton, dx
|
||||
asm mov bot_izq, bx
|
||||
asm mov bot_der, bx
|
||||
bot_izq = bot_izq & 1;
|
||||
bot_der = (bot_izq >> 1 ) & 1;
|
||||
|
||||
if ( y_raton >= (PriGRID_Y - 8) )
|
||||
{
|
||||
if ( !cruz ) {
|
||||
cruz = 1;
|
||||
PunteroRaton = 2;
|
||||
Carga_Puntero();
|
||||
|
||||
if ( ( (x_raton - (PriGRID_X-1) )%GRID_X ) >= GRID_X/2 && ( ( (x_raton - PriGRID_X)%GRID_X ) != 0 ) )
|
||||
x_raton += (GRID_X - ( (x_raton - (PriGRID_X-1))%GRID_X ) );
|
||||
|
||||
else
|
||||
x_raton -= ( ( (x_raton - (PriGRID_X-1))%GRID_X ) );
|
||||
|
||||
y_raton = PriGRID_Y - 8;
|
||||
} else {
|
||||
|
||||
if ( x_raton > 622 )
|
||||
x_raton = 622; else
|
||||
if ( ( (x_raton - (PriGRID_X-1) )%GRID_X ) >= GRID_X/2 && ( ( (x_raton - PriGRID_X)%GRID_X ) != 0 ) )
|
||||
x_raton += (GRID_X - ( (x_raton - (PriGRID_X-1))%GRID_X ) );
|
||||
|
||||
else
|
||||
x_raton -= ( ( (x_raton - (PriGRID_X-1))%GRID_X ) );
|
||||
|
||||
if ( y_raton > 459 )
|
||||
y_raton = 459; else
|
||||
if ( ( (y_raton - ( PriGRID_Y - 8 ) )%GRID_Y ) >= GRID_Y/2 && ( ( (y_raton - ( PriGRID_Y - 8 ) )%GRID_Y ) != 0 ) )
|
||||
y_raton += (GRID_Y - ( (y_raton - ( PriGRID_Y - 8 ) )%GRID_Y ) );
|
||||
else
|
||||
y_raton -= ( ( (y_raton - ( PriGRID_Y - 8 ) )%GRID_Y ) );
|
||||
|
||||
}
|
||||
|
||||
asm mov ax, 4
|
||||
asm mov cx, x_raton
|
||||
asm mov dx, y_raton
|
||||
asm int 0x33
|
||||
|
||||
} else
|
||||
if ( cruz ) {
|
||||
cruz = 0;
|
||||
PunteroRaton = 1;
|
||||
Carga_Puntero();
|
||||
}
|
||||
|
||||
}while( bot_izq == 0 && bot_izq == 0 && !MB_TeclaPulsada() );
|
||||
|
||||
/////////////////////////////////////////
|
||||
// RETURN Derecho Izquierdo //
|
||||
// //
|
||||
// 0 0 0 //
|
||||
// 1 1 0 //
|
||||
// 2 0 1 //
|
||||
// 3 1 1 //
|
||||
// //
|
||||
/////////////////////////////////////////
|
||||
|
||||
|
||||
if ( bot_der ==0 && bot_izq ==0 ) Que = 0;
|
||||
if ( bot_der ==1 && bot_izq ==0 ) Que = 1;
|
||||
if ( bot_der ==0 && bot_izq ==1 ) Que = 2;
|
||||
if ( bot_der ==1 && bot_izq ==1 ) Que = 3;
|
||||
|
||||
desactiva_raton();
|
||||
return Que;
|
||||
}
|
||||
|
||||
void TrazaPerfiles(void)
|
||||
{
|
||||
int X = x_raton+6;//((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)*GRID_X + PriGRID_X;
|
||||
int Y = y_raton+8;
|
||||
int Desde_Y, Hasta_Y;
|
||||
|
||||
if ( y_raton < (PriGRID_Y - 8) ) return;
|
||||
|
||||
// Calculo desde donde, hasta donde tengo que borrar para hacelerar el borrado.
|
||||
// ( esta nueva optimizaci<63>n acelera el tiempo de retardo:
|
||||
// en el mejor caso: un 98.4 %
|
||||
// en el peor caso: un 0.0 %
|
||||
// tiempo medio acelerado ( teu: un 6i.j %
|
||||
|
||||
Desde_Y = Hasta_Y = oldPerfilX;
|
||||
|
||||
if ( Hasta_Y < PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)+1] ) Hasta_Y = PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)+1]*GRID_Y+PriGRID_Y; else
|
||||
if ( Hasta_Y < PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)-1] ) Hasta_Y = PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)-1]*GRID_Y+PriGRID_Y; else
|
||||
// if ( Hasta_Y = PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)-1] )
|
||||
Hasta_Y = Hasta_Y*GRID_Y+PriGRID_Y;
|
||||
|
||||
if ( Desde_Y > PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)+1] ) Desde_Y = PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)+1]*GRID_Y+PriGRID_Y; else
|
||||
if ( Desde_Y > PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)-1] ) Desde_Y = PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)-1]*GRID_Y+PriGRID_Y; else
|
||||
Desde_Y = Desde_Y*GRID_Y+PriGRID_Y;
|
||||
|
||||
setcolor( BackGRID );
|
||||
|
||||
// Borro las franjas adyacentes al punto perfilado:
|
||||
if ( (((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)-1) >=0 ) line( X - ( GRID_X - 1 ), PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)-1]*GRID_Y+PriGRID_Y, (X+1), oldPerfilX*GRID_Y+PriGRID_Y );
|
||||
line( (X+1), oldPerfilX*GRID_Y+PriGRID_Y, X + ( GRID_X + 1 ), PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)+1]*GRID_Y+PriGRID_Y );
|
||||
|
||||
// putpixel( X - ( GRID_X - 1 ), PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)-1]*GRID_Y+PriGRID_Y, MatrizPoint );
|
||||
// putpixel( (X+1), oldPerfilX*GRID_Y+PriGRID_Y, MatrizPoint );
|
||||
// putpixel( X + ( GRID_X + 1 ), PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)+1]*GRID_Y+PriGRID_Y, MatrizPoint );
|
||||
|
||||
// Retrazo los puntos de la matriz anulada
|
||||
{
|
||||
auto int x, y;
|
||||
for( x= ( (((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)-1) >=0 ) ?
|
||||
X - ( GRID_X - 1 ):
|
||||
( X - 1 );
|
||||
x<= (x_raton > 622) ? ( X + 1 ) :
|
||||
( X + ( GRID_X + 1 ) ); x+=GRID_X)
|
||||
// /*
|
||||
for( y=Desde_Y; y<=Hasta_Y; y+=GRID_Y)
|
||||
putpixel( x, y, MatrizPoint );
|
||||
} // Destruccion de x, y
|
||||
|
||||
// Ahora dibujo las lineas correspondientes al perfil izq. y derch.
|
||||
setcolor( LINEFREC );
|
||||
if ( (((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)-1) >=0 ) line( X - ( GRID_X - 1 ), PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)-1]*GRID_Y+PriGRID_Y, (X+1), Y );
|
||||
if ( x_raton <= 622 ) line( (X+1), Y, X + ( GRID_X + 1 ), PerfilX[((( x_raton - ( PriGRID_X - 1 ) )/GRID_X)+1)+1]*GRID_Y+PriGRID_Y );
|
||||
|
||||
}
|
||||
|
||||
|
||||
void TrazaGrafica(void)
|
||||
{
|
||||
int x, y;
|
||||
|
||||
|
||||
setfillstyle( SOLID_FILL, BackGRID );
|
||||
bar( PriGRID_X, PriGRID_Y, 631, 467 );
|
||||
/*
|
||||
for( x=PriGRID_X; x<=631; x+=GRID_X)
|
||||
for( y=PriGRID_Y; y<=467; y+=GRID_Y)
|
||||
putpixel( x, y, MatrizPoint );
|
||||
*/
|
||||
//for( x=6 - ( GRID_X - 1 ); x<=631; x+=GRID_X)
|
||||
for( x= ( 6 - ( 1 - PriGRID_X )%GRID_X - ( GRID_X - 1 ) ) + GRID_X; x<=631; x+=GRID_X)
|
||||
for( y=PriGRID_Y; y<=467; y+=GRID_Y)
|
||||
putpixel( x, y, MatrizPoint );
|
||||
|
||||
|
||||
setcolor( LINEFREC );
|
||||
|
||||
for( x= ( 6 - ( 1 - PriGRID_X )%GRID_X - ( GRID_X - 1 ) ) + GRID_X; x<=631; x+=GRID_X)
|
||||
if ( (x-PriGRID_X)/GRID_X >= 0 )
|
||||
line( x, PerfilX[ (x-PriGRID_X)/GRID_X ]*GRID_Y+PriGRID_Y, x+GRID_X, PerfilX[ ( (x-PriGRID_X)/GRID_X ) + 1 ]*GRID_Y+PriGRID_Y);
|
||||
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user