commit cb15a500e4b334766c9866614bf490186dad7c63 Author: jdg Date: Wed Sep 8 21:11:45 2021 +0200 First commit 11/11/1991 diff --git a/EGAVGA.BGI b/EGAVGA.BGI new file mode 100644 index 0000000..8001631 Binary files /dev/null and b/EGAVGA.BGI differ diff --git a/FREC.ARJ b/FREC.ARJ new file mode 100644 index 0000000..7924efc Binary files /dev/null and b/FREC.ARJ differ diff --git a/FREC.CPP b/FREC.CPP new file mode 100644 index 0000000..293e0a0 --- /dev/null +++ b/FREC.CPP @@ -0,0 +1,341 @@ +#include // Para getch(); +#include // Para getch(); +#include // Para getch(); +#include // Para getch(); +#include // 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 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¢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); + +} + + diff --git a/FREC.EXE b/FREC.EXE new file mode 100644 index 0000000..a476a42 Binary files /dev/null and b/FREC.EXE differ diff --git a/FREC.IMG b/FREC.IMG new file mode 100644 index 0000000..9713897 --- /dev/null +++ b/FREC.IMG @@ -0,0 +1,20 @@ +­1 + + +* Cuadro de ondas +& 0, 190, 640, 480, 7, 63, 56, 2, 2 +& 5, 195, 635, 235, 1, 56, 63, 1, 2 +& 5, 241, 635, 475, 0, 56, 63, 1, 2 + +* Cuadro de numeros +& 0, 0, 250, 130, 7, 63, 56, 2, 2 +& 8, 8, 242, 92, 0, 56, 63, 2, 2 +& 8, 97, 242, 122, 0, 56, 63, 2, 2 + +* | 397, 50, 2, 4, 0, 63, MMMMMMMMM-MMMMMMMMM-MMMMMMMMM-, + + + +* x y fuente tama¤o orientacion color texto + + diff --git a/FREC.PRJ b/FREC.PRJ new file mode 100644 index 0000000..1896560 Binary files /dev/null and b/FREC.PRJ differ diff --git a/FREC/CREDIT.CPP b/FREC/CREDIT.CPP new file mode 100644 index 0000000..47abbbb --- /dev/null +++ b/FREC/CREDIT.CPP @@ -0,0 +1,123 @@ +#include +#include +#include +#include +#include + + +typedef struct +{ + int Ex, Ey, Ez; + char Ecolor; +} CAMPO_de_ESTRELLAS; + +CAMPO_de_ESTRELLAS *Cestrellas, *o; + + +void Actualiza(CAMPO_de_ESTRELLAS *Cest); +void Star3d(CAMPO_de_ESTRELLAS *Cest); +void pon_estrella(CAMPO_de_ESTRELLAS *Cest); +void llena_campo(CAMPO_de_ESTRELLAS *Cest); +void deinit_star(void); +void init_star(void); + +void init_star(void) +{ + randomize(); + if ( ( Cestrellas = (CAMPO_de_ESTRELLAS *)malloc( sizeof(CAMPO_de_ESTRELLAS)*200 ) ) == NULL ) return; + if ( ( o = (CAMPO_de_ESTRELLAS *)malloc( sizeof(CAMPO_de_ESTRELLAS)*200 ) ) == NULL ) return; + + llena_campo(Cestrellas); +} + +void deinit_star(void) +{ + free( Cestrellas ); + free( o ); +} + + + +void llena_campo(CAMPO_de_ESTRELLAS *Cest) +{ + int estrellas; + for ( estrellas = 0; estrellas < 200; estrellas++ ) + pon_estrella( &Cest[estrellas] ); +} + +void pon_estrella(CAMPO_de_ESTRELLAS *Cest) +{ + + Cest -> Ex = random(320)+1; + Cest -> Ey = random(240)+1; + Cest -> Ez = 400 ; + Cest -> Ecolor = EGA_WHITE; + +} + +void Star3d(CAMPO_de_ESTRELLAS *Cest) +{ + Star3d( Cestrellas ); + while( !kbhit() ) Actualiza(Cest); + +} + +void Actualiza(CAMPO_de_ESTRELLAS *Cest) +{ + int Ex, Ey, conta; + static float FactorMovimientoX = 0, FactorMovimientoY = 0, ox = 0, oy = 0; + static float x=0.1, y=0.1; + static char color = 0; + + + for( conta=0; conta<200; conta++ ) + { +if ( o[conta].Ex+ox> 10 && o[conta].Ex+ox < 635 && o[conta].Ey+oy+100 >325 && o[conta].Ey+oy+100 < 470 ) + putpixel ( o[conta].Ex+ox, o[conta].Ey+oy+100, 0 ); +// putpixel ( o[conta].Ex+ox+5, o[conta].Ey+oy+(317/2), 0 ); + Ex = ( ((256*Cest[conta].Ex)/Cest[conta].Ez))+320; + Ey = ( ((256*Cest[conta].Ey)/Cest[conta].Ez))+320;//240; + Cest[conta].Ez = Cest[conta].Ez - 5 ; + + o[conta].Ex = Ex; + o[conta].Ey = Ey; + +color++; +if ( color > 10 ) +{ +if ( Cest[conta].Ecolor == EGA_WHITE ) + Cest[conta].Ecolor = EGA_LIGHTGRAY; +else if ( Cest[conta].Ecolor == EGA_LIGHTGRAY ) + Cest[conta].Ecolor = EGA_DARKGRAY; +else + Cest[conta].Ecolor = EGA_WHITE; +color = 0; +} + + if ( Ex>635 && Ey>470+100 ) + pon_estrella ( &Cest[conta] ); + + if ( Cest[conta].Ez <= 20 || Ex>635 || Ey>470 || Ex<5 || Ey<0 ) +// if ( Cest[conta].Ez <= 20 || Ex>635 || Ey>470 || Ex<5 || Ey<317 ) + pon_estrella ( &Cest[conta] ); + +if ( Ex+FactorMovimientoX > 10 && Ex+FactorMovimientoX < 635 && Ey+FactorMovimientoY+100 >325 && Ey+FactorMovimientoY+100 < 470 ) + putpixel ( Ex+FactorMovimientoX, Ey+FactorMovimientoY+100, Cest[conta].Ecolor ); +// putpixel ( Ex+FactorMovimientoX+5, Ey+FactorMovimientoY+(317/2), Cest[conta].Ecolor ); + + + } + + ox = FactorMovimientoX; + oy = FactorMovimientoY; + + FactorMovimientoX+= x; + FactorMovimientoY+= y; + if ( FactorMovimientoX > 100 ) x = -0.1; + if ( FactorMovimientoX < -100 ) x = 0.1; + if ( FactorMovimientoY > 100 ) y = -0.1; + if ( FactorMovimientoY < -100 ) y = 0.1; + + + +} \ No newline at end of file diff --git a/FREC/CREDIT.FLI b/FREC/CREDIT.FLI new file mode 100644 index 0000000..5841fd1 Binary files /dev/null and b/FREC/CREDIT.FLI differ diff --git a/FREC/DIBUJOS.CPP b/FREC/DIBUJOS.CPP new file mode 100644 index 0000000..6ce2bf2 --- /dev/null +++ b/FREC/DIBUJOS.CPP @@ -0,0 +1,417 @@ +#include + + char cargar [18] [18] = + { + 14,14,14,14,14,3,3,3,3,3,3,3,3,3,3,3,3,3, + 14,14,14,14,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 14,14,14,14,3,0,0,0,0,0,0,0,0,0,0,0,3,3, + 14,14,14,14,14,0,1,1,1,1,1,1,1,1,1,0,3,3, + 14,3,14,14,14,14,1,1,1,1,1,1,1,1,1,0,3,3, + 3,3,3,14,14,14,14,0,0,1,1,1,1,1,1,0,3,3, + 3,3,3,3,14,14,7,7,0,1,1,1,1,1,1,0,3,3, + 3,3,3,3,3,0,7,7,0,1,1,0,0,1,1,0,3,3, + 3,3,3,3,3,0,7,7,0,1,0,7,7,0,1,0,3,3, + 3,3,3,3,3,0,0,0,0,1,0,7,7,0,1,0,3,3, + 3,3,3,3,3,0,0,0,0,1,1,0,0,1,1,0,3,3, + 3,3,3,3,3,0,7,7,0,1,1,1,1,1,1,0,3,3, + 3,3,3,3,3,0,0,0,0,1,1,1,1,1,1,0,3,3, + 3,3,3,3,3,0,1,1,1,1,1,1,1,1,1,0,3,3, + 3,3,3,3,3,3,0,1,1,1,1,1,1,1,1,0,3,3, + 3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + }; + + char TipoOnda[][18] [18] = + { + { + 3,3,3,3,14,14,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,6,3,3,14,14,3,3,3,3,3, + 3,3,3,3,3,3,3,3,6,3,3,14,14,3,3,3,3,3, + 3,3,3,3,3,3,3,3,6,3,3,14,14,3,3,3,3,3, + 3,3,3,3,14,14,3,3,3,3,3,14,14,3,3,3,3,3, + 3,3,3,3,14,14,3,3,3,3,3,14,14,3,3,3,3,3, + 3,3,3,3,14,14,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,3,3,3,3,3,14,14,3,3,3,3,3, + 3,3,3,3,14,14,3,3,3,3,3,14,14,3,3,3,3,3, + 3,3,3,3,3,3,3,3,6,3,3,14,14,3,3,3,3,3, + 3,3,3,3,3,3,3,3,6,3,3,14,14,3,3,3,3,3, + 3,3,3,3,3,3,3,3,6,3,3,14,14,3,3,3,3,3, + 3,3,3,3,14,14,3,3,3,3,3,14,14,3,3,3,3,3 + }, + { + 3,3,3,3,14,14,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,14,14,14,14,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,14,14,14,14,14,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,6,14,14,14,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,6,3,3,14,14,3,3,3,3,3, + 3,3,3,3,3,3,3,3,6,3,3,14,14,3,3,3,3,3, + 3,3,3,3,3,3,3,3,6,14,14,14,3,3,3,3,3,3, + 3,3,3,3,3,3,14,14,14,14,14,3,3,3,3,3,3,3, + 3,3,3,3,3,14,14,14,14,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,14,14,14,14,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,14,14,14,14,14,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,6,14,14,14,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,6,3,3,14,14,3,3,3,3,3, + 3,3,3,3,3,3,3,3,6,3,3,14,14,3,3,3,3,3, + 3,3,3,3,3,3,3,3,6,14,14,14,3,3,3,3,3,3 + }, + { + 3,3,3,3,3,14,14,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,14,14,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,14,14,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,14,14,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,6,14,14,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,6,3,14,14,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,6,3,3,14,14,3,3,3,3,3, + 3,3,3,3,3,3,3,3,6,3,14,14,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,6,14,14,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,14,14,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,14,14,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,14,14,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,14,14,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,14,14,3,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,14,14,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,14,14,6,3,3,3,3,3,3,3,3,3 + }, + { + 3,3,3,3,14,14,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,14,14,14,14,14,14,14,3,3,3,3,3, + 3,3,3,3,14,14,14,14,14,14,14,14,14,3,3,3,3,3, + 3,3,3,3,3,3,3,3,6,3,3,14,14,3,3,3,3,3, + 3,3,3,3,3,3,3,3,6,3,3,14,14,3,3,3,3,3, + 3,3,3,3,3,3,3,3,6,3,3,14,14,3,3,3,3,3, + 3,3,3,3,14,14,14,14,14,14,14,14,14,3,3,3,3,3, + 3,3,3,3,14,14,14,14,14,14,14,14,14,3,3,3,3,3, + 3,3,3,3,14,14,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,14,14,14,14,14,14,14,3,3,3,3,3, + 3,3,3,3,14,14,14,14,14,14,14,14,14,3,3,3,3,3, + 3,3,3,3,3,3,3,3,6,3,3,14,14,3,3,3,3,3, + 3,3,3,3,3,3,3,3,6,3,3,14,14,3,3,3,3,3, + 3,3,3,3,3,3,3,3,6,3,3,14,14,3,3,3,3,3, + 3,3,3,3,14,14,14,14,14,14,14,14,14,3,3,3,3,3 + }, + { + 3,3,3,3,3,3,14,14,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,14,14,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,14,14,3,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,14,14,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,14,14,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,14,14,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,14,14,3,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,14,14,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,14,14,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,14,14,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,14,14,3,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,14,14,3,6,3,3,3,3,3,3,3,3,3 + }, + { + 3,3,3,3,3,3,3,14,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,14,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,14,3,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,14,3,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,3,3,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,3,3,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,14,14,14,14,14,14,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,4,3,14,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,4,14,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,14,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,14,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,14,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,14,3,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,14,3,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,3,3,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,3,3,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,14,14,14,14,14,14,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,4,3,14,3,3,3,3,3,3,3 + }, + { + 3,3,3,3,3,14,14,14,14,14,3,3,3,3,3,3,3,3, + 3,3,3,3,3,14,3,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,14,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,14,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,14,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,14,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,4,14,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,4,3,14,3,3,3,3,3,3,3, + 3,3,3,3,3,14,14,14,14,14,3,3,3,3,3,3,3,3, + 3,3,3,3,3,14,3,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,14,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,14,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,14,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,14,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,4,14,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,4,3,14,3,3,3,3,3,3,3, + 3,3,3,3,3,14,14,14,14,14,3,3,3,3,3,3,3,3, + 3,3,3,3,3,14,3,3,4,3,3,3,3,3,3,3,3,3 + }, + { + 3,3,3,3,3,3,3,14,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,14,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,14,3,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,14,3,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,3,3,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,3,3,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,3,3,3,4,3,3,14,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,4,3,14,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,4,14,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,14,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,14,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,14,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,14,3,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,14,3,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,3,3,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,3,3,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,3,3,3,4,3,3,14,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,4,3,14,3,3,3,3,3,3,3 + }, + { + 3,3,3,3,3,14,3,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,14,3,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,14,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,14,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,14,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,14,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,4,14,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,4,3,14,3,3,3,3,3,3,3, + 3,3,3,3,3,14,3,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,14,3,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,14,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,14,3,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,14,4,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,14,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,4,14,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,4,3,14,3,3,3,3,3,3,3, + 3,3,3,3,3,14,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,14,3,3,4,3,3,3,3,3,3,3,3,3 + }, + { + 3,3,3,3,3,14,14,14,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,14,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,14,14,3,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,14,14,3,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,14,14,3,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,14,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,14,14,14,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,14,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,14,14,3,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,14,14,3,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,14,14,3,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,14,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,14,14,14,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,14,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,14,14,3,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,14,14,3,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,14,14,3,3,3,6,3,3,3,3,3,3,3,3,3, + 3,3,3,3,14,14,14,3,6,3,3,3,3,3,3,3,3,3 + } + }; + + + char flecha [18] [18] = + { + 3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,0,4,0,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,0,4,4,4,0,3,3,3,3,3,3, + 3,3,3,3,3,3,0,4,4,4,4,4,0,3,3,3,3,3, + 3,3,3,3,3,0,4,4,4,4,4,4,4,0,3,3,3,3, + 3,3,3,3,0,4,4,4,4,4,4,4,4,4,0,3,3,3, + 3,3,3,0,4,4,4,4,4,4,4,4,4,4,4,0,3,3, + 3,3,0,0,0,0,0,4,4,4,4,4,0,0,0,0,0,3, + 3,3,3,3,3,3,0,4,4,4,4,4,0,3,3,3,3,3, + 3,3,3,3,3,3,0,4,4,4,4,4,0,3,3,3,3,3, + 3,3,3,3,3,3,0,4,4,4,4,4,0,3,3,3,3,3, + 3,3,3,3,3,3,0,4,4,4,4,4,0,3,3,3,3,3, + 3,3,3,3,3,3,0,4,4,4,4,4,0,3,3,3,3,3, + 3,3,3,3,3,3,0,4,4,4,4,4,0,3,3,3,3,3, + 3,3,3,3,3,3,0,4,4,4,4,4,0,3,3,3,3,3, + 3,3,3,3,3,3,0,4,4,4,4,4,0,3,3,3,3,3, + 3,3,3,3,3,3,0,4,4,4,4,4,0,3,3,3,3,3, + 3,3,3,3,3,3,0,0,0,0,0,0,0,3,3,3,3,3 + }; + + char salvar[18] [18] = + { + 3,14,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 14,14,14,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 14,14,14,14,3,3,14,0,0,0,0,0,0,0,0,0,3,3, + 3,14,14,14,14,14,14,1,1,1,1,1,1,1,1,0,3,3, + 3,3,14,14,14,14,14,1,1,1,1,1,1,1,1,0,3,3, + 3,3,14,14,14,14,14,0,0,1,1,1,1,1,1,0,3,3, + 3,14,14,14,14,14,14,7,0,1,1,1,1,1,1,0,3,3, + 3,3,3,3,3,0,7,7,0,1,1,0,0,1,1,0,3,3, + 3,3,3,3,3,0,7,7,0,1,0,7,7,0,1,0,3,3, + 3,3,3,3,3,0,0,0,0,1,0,7,7,0,1,0,3,3, + 3,3,3,3,3,0,0,0,0,1,1,0,0,1,1,0,3,3, + 3,3,3,3,3,0,7,7,0,1,1,1,1,1,1,0,3,3, + 3,3,3,3,3,0,0,0,0,1,1,1,1,1,1,0,3,3, + 3,3,3,3,3,0,1,1,1,1,1,1,1,1,1,0,3,3, + 3,3,3,3,3,3,0,1,1,1,1,1,1,1,1,0,3,3, + 3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + }; + + char salir [18] [18] = + { + 3,3,3,3,3,3,0,8,8,0,8,0,15,15,15,15,15,0, + 3,3,3,3,3,3,0,8,0,0,8,0,15,15,15,15,15,0, + 3,3,3,3,3,3,0,0,4,0,8,0,15,15,15,15,15,0, + 3,3,3,3,3,3,0,4,4,0,8,0,15,15,15,15,15,0, + 3,3,3,3,3,0,4,4,4,0,8,0,15,15,15,15,15,0, + 3,3,3,3,3,0,4,4,0,0,8,0,15,15,15,15,15,0, + 3,3,3,3,3,0,4,4,0,0,8,0,15,15,15,15,15,0, + 3,3,3,3,3,0,4,4,0,0,8,0,15,15,15,15,15,0, + 3,3,3,3,0,4,4,0,15,0,8,0,15,15,15,15,15,0, + 3,3,3,3,0,4,4,0,15,0,8,0,15,15,15,15,15,0, + 3,3,3,3,0,4,4,0,15,0,8,0,15,15,15,15,15,0, + 3,3,3,0,4,4,4,0,15,0,8,0,15,15,15,15,15,0, + 3,3,3,0,4,4,0,15,15,0,8,0,15,15,15,15,15,0, + 3,3,3,0,4,4,0,0,0,0,8,0,0,0,0,0,0,0, + 3,3,3,0,4,0,7,7,0,8,0,7,7,7,7,7,0,3, + 3,3,0,4,0,7,7,0,8,0,7,7,7,7,7,0,3,3, + 3,3,0,0,0,0,0,8,0,7,7,7,7,7,0,3,3,3, + 3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3 + }; + + char led_off [18] [18] = + { + 3,3,3,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3, + 3,3,0,7,7,7,7,0,3,3,3,3,3,3,3,3,3,3, + 3,0,7,4,12,12,4,7,0,3,3,3,3,3,3,3,3,3, + 0,7,4,12,4,4,4,4,8,0,3,3,3,3,3,3,3,3, + 0,7,4,4,4,4,4,4,8,0,3,3,3,3,3,3,3,3, + 0,7,4,4,4,4,4,12,8,0,3,3,3,3,3,3,3,3, + 0,7,4,4,4,4,12,12,8,0,3,3,3,3,3,3,3,3, + 3,0,8,4,12,12,12,8,0,3,3,3,3,3,3,3,3,3, + 3,3,0,8,8,8,8,0,3,3,3,3,3,3,3,3,3,3, + 3,3,3,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + }; + + char help [18] [18] = + { + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3, + 3,3,0,4,4,4,4,0,3,3,3,3,3,3,3,3,3,3, + 3,0,4,4,4,4,4,0,3,3,3,3,3,3,3,3,3,3, + 0,4,4,4,0,4,4,0,3,3,3,3,3,3,3,3,3,3, + 0,4,4,0,3,0,0,3,3,3,3,3,0,0,3,3,3,0, + 0,4,4,0,3,3,3,3,3,3,3,0,4,4,0,3,0,4, + 0,4,4,0,3,3,3,3,3,3,0,4,4,4,0,3,0,4, + 0,4,4,0,3,3,3,3,3,0,4,4,0,0,3,3,3,0, + 0,4,4,4,0,3,3,3,0,4,4,0,3,3,3,3,3,3, + 3,0,4,4,4,0,0,0,4,4,0,3,3,3,3,3,3,3, + 3,3,0,4,4,4,4,4,4,0,3,3,3,3,3,3,3,3, + 3,3,3,0,4,4,4,4,0,3,3,3,3,3,3,3,3,3, + 3,3,3,3,0,0,0,0,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + }; + + char CREDITS [18] [18] = + { + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3, + 3,0,4,4,4,4,4,4,4,4,0,0,3,3,3,0,0,3, + 0,4,4,4,4,4,4,4,4,4,4,4,0,3,0,4,4,0, + 0,4,4,4,4,4,4,4,4,4,4,4,0,3,0,4,4,0, + 3,0,4,4,4,4,4,4,4,4,0,0,3,3,3,0,0,3, + 3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + }; + + char led_on [18] [18] = + { + 3,3,3,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3, + 3,3,0,7,7,7,7,0,3,3,3,3,3,3,3,3,3,3, + 3,0,7,11,13,13,11,7,0,3,3,3,3,3,3,3,3,3, + 0,7,11,13,11,11,11,11,8,0,3,3,3,3,3,3,3,3, + 0,7,11,11,11,11,11,11,8,0,3,3,3,3,3,3,3,3, + 0,7,11,11,11,11,11,13,8,0,3,3,3,3,3,3,3,3, + 0,7,11,11,11,11,13,13,8,0,3,3,3,3,3,3,3,3, + 3,0,8,11,13,13,13,8,0,3,3,3,3,3,3,3,3,3, + 3,3,0,8,8,8,8,0,3,3,3,3,3,3,3,3,3,3, + 3,3,3,0,0,0,0,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 + }; + +void ponicono(int x,int y,char matriz[18][18], char pos) +{ + int veces1,veces2; + + for (veces1=0;veces1<=17;veces1++) + { + for (veces2=0;veces2<=17;veces2++) + { + + switch( pos ) + { + case 1: + if ( matriz[veces1][veces2] != 3 ) + putpixel(x+veces1,y+veces2,matriz[veces1][veces2]); + break; + case 2: + if ( matriz[17-veces2][veces1] != 3 ) + putpixel(x+veces1,y+veces2,matriz[17-veces2][veces1]); + break; + case 3: + if ( matriz[17-veces1][veces2] != 3 ) + putpixel(x+veces1,y+veces2,matriz[17-veces1][veces2]); + break; + case 4: + if ( matriz[veces2][veces1] != 3 ) + putpixel(x+veces1,y+veces2,matriz[veces2][veces1]); + break; + } + } + } + +} + + diff --git a/FREC/DIBUJOS.H b/FREC/DIBUJOS.H new file mode 100644 index 0000000..ce5ee02 --- /dev/null +++ b/FREC/DIBUJOS.H @@ -0,0 +1,17 @@ +#define MODULO extern + +MODULO char CREDITS [18] [18]; +MODULO char help [18] [18]; +MODULO char led_on [18] [18]; +MODULO char led_off [18] [18]; +MODULO char salir [18] [18]; +MODULO char salvar [18] [18]; +MODULO char cargar [18] [18]; +MODULO char flecha [18] [18]; +MODULO char TipoOnda [11] [18] [18]; + +#undef MODULO + +void ponicono(int x,int y,char matriz[18][18], char pos); + + diff --git a/FREC/EGAVGA.BGI b/FREC/EGAVGA.BGI new file mode 100644 index 0000000..8001631 Binary files /dev/null and b/FREC/EGAVGA.BGI differ diff --git a/FREC/FREC.DSK b/FREC/FREC.DSK new file mode 100644 index 0000000..f29443f Binary files /dev/null and b/FREC/FREC.DSK differ diff --git a/FREC/FREC.EXE b/FREC/FREC.EXE new file mode 100644 index 0000000..2c1fd82 Binary files /dev/null and b/FREC/FREC.EXE differ diff --git a/FREC/FREC.H b/FREC/FREC.H new file mode 100644 index 0000000..8a8e8c0 --- /dev/null +++ b/FREC/FREC.H @@ -0,0 +1,64 @@ +#ifdef __cplusplus + #define __CPPARGS ... +#else + #define __CPPARGS +#endif + +#define INTR 0X1C /* The clock tick interrupt */ +#define OK 1 +#define ERROR -1 +#define oAnchoVentana 626 +#define oAltoVentana 156 +#define oVentanas 5 +#define oFinalOnda oAnchoVentana * oVentanas +#define inicioMGx 7 +#define inicioMGy 127 +#define GRANDEo 1 +#define MINIo 0 +#define alcanceRatonY 292 +#define alcanceRatonX 626 +#define factorCorreccionRatonY -9 +#define mAltoCuadro 20 +#define inicioMmGy 290 +#define ON 1 +#define OFF 0 +#define Salvar 1 +#define Cargar 2 + +typedef struct { + // N§'s grandes + char nBorde, nRelleno, nFondo, + // Letras digitales + lFondo, lLetra, + // Onda osciloscopio + oMatrix, oOnda, oSelect, + // Onda Generada + gMatrix, gOnda, + // Cuadro MiniOnda + mOnda, mFondo, mMarco, + // Textos + Texto, F_Texto, VisorLCD; +} CFG_FREC; + +extern CFG_FREC cfgFREC; + +typedef struct + { + int x, y; + char ndigitos; + char AX, AY; + char C1, C2, C3; + } p_graphics; + +extern p_graphics Numeros; +extern p_graphics Letras; + + +extern void Carga_Puntero (void); +extern char Optar( char *texto1, char *texto2, char *texto3 ); +extern char file_browser( char *comodin_name, char *texto1, char Cargar_Salvar ); + +extern int Numero_Digital( long numero, p_graphics *ND ); +extern void Fuente_Amplia( char *Frase, p_graphics *FA ); + +extern int statusBoton; diff --git a/FREC/FREC.IMG b/FREC/FREC.IMG new file mode 100644 index 0000000..4620d15 --- /dev/null +++ b/FREC/FREC.IMG @@ -0,0 +1,280 @@ +* +* ATENCION, ESTE ES EL CàDIGO FUENTE DE MIS LIBRERIAS PARA GENERAR FONDOS +* Y PULSADORES. +* +* VERSION DEL CODIGO COMPILABLE EN TIEMPO DE EJECUCION +* +* UTILICE EL PROGRAMA MK_BOTON.EXE PARA CONVERTIR A C++ +* Y COMPILARLO JUNTO AL CODIGO FUENTE DE LA APLICACION. +* +* El autor de este programa vende LAS LIBRERIAS que el mismo a fabricado +* y con las que estan ello este programa: +* +* MAKE_BOTON 5.000 ptas ( Crea Pulsadores y FX's sin esfuerzo ) +* WAVE_GENER 5.000 ptas ( Muestreador y retocador completo ) +* FX_PACK 5.000 ptas ( N§s Grandes, Letras Despl, MouseP... ) +* WAVE_PLAY 3.500 ptas ( Librerias de reproducci¢n de waves +* de hasta 32 TeraBytes con solo 8 Kb ) +* XMS_MEMMGR 3.500 ptas ( Clase para manejar la XMS ) +* B_DATOS 5.000 ptas ( Clase " la gestion de bases de datos ) +* +* Ú---> 15.000 <---Â---> 15.000 <---Ä---> 15.000 <---Â---> 15.000 <---¿ +* Ã---> 15.000 <---´ TODO EL KIT POR SOLO Ã---> 15.000 <---´ +* À---> 15.000 <---Á---> 15.000 <---Ä---> 15.000 <---Á---> 15.000 <---Ù + + + +* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +* Û Û +* Û Pantalla Principal Û +* Û Û +* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ + +­1 + + +* Cuadro de ondas +& 0, 120, 640, 480, 7, 63, 56, 2, 2 +& 5, 125, 635, 284, 0, 56, 63, 1, 2 +& 5, 288, 635, 313, 1, 56, 63, 1, 2 +& 5, 317, 635, 475, 0, 56, 63, 1, 2 + +* Cuadro de numeros +& 0, 0, 240, 120, 7, 63, 56, 2, 2 +& 8, 8, 232, 82, 0, 56, 63, 2, 2 +& 8, 87, 232, 112, 0, 56, 63, 2, 2 + +* Cuadro de Botone +* +* COMIENZA EL JUEGO... ( JD EL GENIO DE GENIOS... ) +* +* + +#5 + +!1, 33 + +* Boton Seleccion Generador/Osciloscopio +$ 240, 0, 315, 24, 7, 63, 56, 2, 2, 00, 00 + * Boton ejecutar accion GENERAR/OBTENER onda + $ 315, 0, 340, 24, 7, 63, 56, 2, 2, 00, 00 +* ???????????????????????????????????? +$ 240, 24, 315, 48, 7, 63, 56, 2, 2, 00, 00 + * ???????????????????????????????????? + $ 315, 24, 340, 48, 7, 63, 56, 2, 2, 00, 00 + +* Boton Salvar +$ 240, 48, 340, 72, 7, 63, 56, 2, 2, 00, 00 +* Boton Cargar +$ 240, 72, 340, 96, 7, 63, 56, 2, 2, 00, 00 + +* Boton Salir +$ 240, 96, 340, 120, 7, 63, 56, 2, 2, 83, 00 + + +* Boton Ayuda on-Line +$ 340, 0, 365, 30, 7, 63, 56, 2, 2, 00, 00 +* Boton Creditos +$ 340, 30, 365, 60, 7, 63, 56, 2, 2, 00, 00 +* Boton REGISTRO / MI LICENCIA +$ 340, 60, 365, 120, 7, 63, 56, 2, 2 + + +* Cuadro/Boton Amplitud +& 540, 0, 615, 24, 7, 63, 56, 2, 2 + $ 542, 2, 613, 22, 0, 56, 63, 2, 2, 00, 00 +& 540, 24, 615, 48, 7, 63, 56, 2, 2 + $ 542, 26, 613, 46, 0, 56, 63, 2, 2, 00, 00 +* Cuadro/Boton unidad +& 611, 0, 640, 24, 7, 63, 56, 2, 2 + $ 613, 2, 638, 22, 0, 56, 63, 2, 2, 00, 00 +& 611, 24, 640, 48, 7, 63, 56, 2, 2 + $ 613, 26, 638, 46, 0, 56, 63, 2, 2, 00, 00 + +* Botones de cursor y acciones mas precisas para estos + * + $ 615, 48, 640, 72, 7, 63, 56, 2, 2, 00, 73 + * --------->>>>>> Flecha derecha + $ 615, 72, 640, 96, 7, 63, 56, 2, 2, 00, 77 + * Marcar Parte de la onda + $ 615, 96, 640, 120, 7, 63, 56, 2, 2, 00, 81 + + * ^^^^^ Flecha arriba + $ 590, 48, 615, 72, 7, 63, 56, 2, 2, 00, 72 + * Centrar cero + $ 590, 72, 615, 96, 7, 63, 56, 2, 2, 00, 00 + * \/ \/ \/ \/ \/ Flecha abajo + $ 590, 96, 615, 120, 7, 63, 56, 2, 2, 00, 80 + + * + $ 565, 48, 590, 72, 7, 63, 56, 2, 2, 00, 71 + * <<<<<<-------- Flecha izquierda + $ 565, 72, 590, 96, 7, 63, 56, 2, 2, 00, 75 + * Ground ( Tierra ) + $ 565, 96, 590, 120, 7, 63, 56, 2, 2, 00, 79 + +* Selecciona la onda completa +$ 540, 48, 565, 120, 7, 63, 56, 2, 2, 00, 00 + +* Creacion de onda predefinida + * Estancar proceso + $ 365, 0, 395, 24, 7, 63, 56, 2, 2, 00, 00 + * Retroceder tipo de onda + $ 395, 0, 424, 24, 7, 63, 56, 2, 2, 00, 00 + * Onda pred. 1, 2, 3 + $ 424, 0, 453, 24, 7, 63, 56, 2, 2, 00, 00 + $ 453, 0, 482, 24, 7, 63, 56, 2, 2, 00, 00 + $ 482, 0, 511, 24, 7, 63, 56, 2, 2, 00, 00 + * Avanzar tipo de onda + $ 511, 0, 540, 24, 7, 63, 56, 2, 2, 00, 00 + + +$ 365, 24, 424, 48, 7, 63, 56, 2, 2, 00, 00 +* +$ 424, 24, 482, 48, 7, 63, 56, 2, 2, 00, 00 +* +$ 482, 24, 540, 48, 7, 63, 56, 2, 2, 00, 00 + +* | 397, 50, 2, 4, 0, 63, MMMMMMMMM-MMMMMMMMM-MMMMMMMMM-, + +­2 + +| 240, 50, 2, 6, 0, 63, Salvar, +| 241, 51, 2, 6, 0, 0, Salvar, +| 240, 74, 2, 6, 0, 63, Cargar, +| 241, 75, 2, 6, 0, 0, Cargar, +| 240, 98, 2, 6, 0, 63, Salir, +| 241, 99, 2, 6, 0, 0, Salir, + | 240, 99, 2, 6, 0, 63, _, + | 241, 100, 2, 6, 0, 0, _, + +| 614, 108, 2, 2, 0, 63, Marca, +| 615, 109, 2, 2, 0, 0, Marca, +| 563, 107, 2, 4, 0, 63, GND, +| 564, 108, 2, 4, 0, 0, GND, +| 382, 1, 2, 4, 1, 63, CRT, +| 383, 2, 2, 4, 1, 0, CRT, + +!2, 1 +$ 204, 274, 276, 291, 7, 56, 63, -2, 1, 00, 30 + +* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +* Û Û +* Û Casilla de pregunta ( OPTAR por.... ACEPTAR CANCELAR Û +* Û Û +* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ + +­100 +& 200, 212, 440, 267, 7, 56, 63, 2, 1 +& 205, 217, 435, 262, 7, 63, 56, -2, 1 + +* Boton Aceptar +& 200, 270, 280, 295, 7, 63, 56, 2, 1 +* Boton Cancelar +& 360, 270, 440, 295, 7, 63, 56, 2, 1 + +­101 +| 200, 274, 2, 5, 0, 63, Aceptar, +| 201, 275, 2, 5, 0, 0, Aceptar, + | 200, 274, 2, 5, 0, 14, A, + | 201, 275, 2, 5, 0, 0, A, + + +| 340, 274, 2, 5, 0, 63, Cancelar, +| 341, 275, 2, 5, 0, 0, Cancelar, + | 340, 274, 2, 5, 0, 14, C, + | 341, 275, 2, 5, 0, 0, C, + + +!3, 2 +* Boton Aceptar +$ 204, 274, 276, 291, 7, 56, 63, -2, 1, 00, 30 +* Boton Cancelar +$ 364, 274, 436, 291, 7, 56, 63, -2, 1, 00, 46 + + +* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ +* Û Û +* Û File Browser Û +* Û Û +* ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ + +!4, 4 + +*Cuadro Cancelar +$ 377, 169, 391, 221, 7, 56, 63, 0, 1, 00, 46 +*Boton Aceptar +$ 377, 223, 391, 276, 7, 56, 63, 0, 1, 00, 30 + +* Subir +$ 377, 278, 391, 303, 7, 56, 63, 0, 1, 00, 72 +* Bajar +$ 377, 305, 391, 330, 7, 56, 63, 0, 1, 00, 80 + + + +* x y fuente tama¤o orientacion color texto + +* Men£ para Cargar o Salvar +­10 + +*Cuadro Total +& 240, 140, 400, 340, 7, 63, 56, 2, 1 +& 243, 143, 397, 337, 7, 56, 63, -2, 1 +*Cuadro Informativo +& 250, 150, 391, 164, 7, 56, 63, -0, 1 +*Cuadro introduccion nuevos datos +& 250, 169, 375, 180, 0, 56, 63, 0, 1 +*Cuadro de muestreo +& 250, 185, 375, 330, 0, 56, 63, 0, 1 + +*Cuadro Cancelar +& 377, 169, 391, 221, 7, 56, 63, 0, 1 +*Boton Aceptar +& 377, 223, 391, 276, 7, 56, 63, 0, 1 + +* Subir +& 377, 278, 391, 303, 7, 56, 63, 0, 1 +* Bajar +& 377, 305, 391, 330, 7, 56, 63, 0, 1 + +|377, 169, 2, 4, 1, 63, Cancelar, + |378, 170, 2, 4, 1, 0, Cancelar, + |377, 169, 2, 4, 1, 2, C , + |378, 170, 2, 4, 1, 0, C , +|377, 223, 2, 4, 1, 63, Aceptar , + |378, 224, 2, 4, 1, 0, Aceptar , + |377, 223, 2, 4, 1, 2, A , + |378, 224, 2, 4, 1, 0, A , + +|377, 288, 2, 4, 0, 63, -, + |378, 289, 2, 4, 0, 0, -, +|377, 315, 2, 4, 0, 63, +, + |378, 316, 2, 4, 0, 0, +, + + + +******************************************************************************** +**** Prueba del pulsador derecho... ******************************************* +******************************************************************************** +!5, 7 +* Boton Cerrar seleccion derecho +$ 0, 0, 25, 52, 7, 63, 56, 2, 2, 00, 00 + +* Boton seleccion DISPERSION +$ 30, 0, 105, 24, 7, 63, 56, 2, 2, 00, 00 +$ 50, 3, 103, 21, 0, 56, 63, 2, 1, 00, 00 + +* Boton seleccion PRESICIàN +$ 30, 29, 105, 52, 7, 63, 56, 2, 2, 00, 00 +$ 50, 32, 103, 49, 0, 56, 63, 2, 1, 00, 00 + + * Subir selecci¢n + $ 110, 0, 135, 24, 7, 63, 56, 2, 2, 00, 00 + * Bajar selecci¢n + $ 110, 29, 135, 52, 7, 63, 56, 2, 2, 00, 00 +* TODO EL CUADRO MIDE: (0, 0) - (135, 52) +******************************************************************************** +******************************************************************************** +******************************************************************************** + diff --git a/FREC/FREC.PRJ b/FREC/FREC.PRJ new file mode 100644 index 0000000..fe9473a Binary files /dev/null and b/FREC/FREC.PRJ differ diff --git a/FREC/FRECFILE.CPP b/FREC/FRECFILE.CPP new file mode 100644 index 0000000..3826dbe --- /dev/null +++ b/FREC/FRECFILE.CPP @@ -0,0 +1,577 @@ +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + + +#include "..\..\libs\make_bot\make_bot.h" +#include "frec.h" + +extern CFG_FREC cfgFREC; +//////////////////////////////////////////////////////////////////////////// +/***************************************************************************\ +| Critical Disk Error handling routines (C) 1995 Jason Speight. | +| void interrupt critical_error_handler(__CPPARGS) is the interrupt which | +| captures disk io errors. (int 0x24, if you're interested!) Such errors | +| are : Disk not inserted in drive, seek error reading from a drive, general| +| disk failure etc. The only things the interrupt does is : | +| Suppress the dos ABORT,RETRY,FAIL,IGNORE statement | +| Sets a variable erroroccurred to the dos error statement. (!=0) | +| | +| StartCEH() and StopCEH() start and stop the error handler. YOU MUST | +| STOPCEH BEFORE THE EXIT OF THE PROGRAM. or else when you get a disk | +| error, the int 24 issued bu DOS points to the middle of nowhere! *HANG* | +| | +| diskerror() is my routine to display a disk IO error. It also sets the | +| global variable erroroccurred to 0 for future use. This procedure also | +| needs access to "SCRNHNDL.H" and "BOXES.H" | +| | +| BTW, anybody know how to trap the message "PLEASE INSERT DISK FOR DRIVE x"| +\***************************************************************************/ + +void interrupt critical_error_handler(.../*__CPPARGS*/); // interrupt prototype +void interrupt (*old_int24)(.../*__CPPARGS*/); // interrupt function pointer +void startceh(); +void stopceh(); + +int erroroccurred=0; + +//////////////////////////////////////////////////////////////////////////// + +typedef struct { + char files[13] ; //200 files, 12 byte filename (+1 for terminator!) + long filesize ; //Try as static.. free up that ram, bud. (Use HUGE mem model) + unsigned char attrs ; +} SFile; + +SFile *S_File; + +void FileDownRow(void); +void FileUpRow(void) ; +void PrintWholeScreen_Files(void); +void PrintSelectRow( char Hide_Show ); + +unsigned char FileRow = 0; int FileCurrTopRow = 0; +unsigned int maxfiles=0; +unsigned int rasterscan(char *fm); +char Archivo[13]; +void PrintVisor(void); + +char Optar( char *texto1, char *texto2, char *texto3 ); + +int InputCadenaG(char *s, int numalp, int lmax, int cc, int cf, int left, int up, int right, int down); + +char file_browser( char *comodin_name, char *texto1, char Cargar_Salvar ); + +char file_browser( char *comodin_name, char *texto1, char Cargar_Salvar ){ + + int ok = 0, inst = 0; + struct textsettingstype textinfo; + char oldpath[229]=" -- NONE -- "; //internal. do not change + unsigned char olddrive=255; //impossible drive name + char olddisk, key; + + startceh(); + + FileRow = FileCurrTopRow = 0; + + olddrive = getdisk(); + getcwd( oldpath, 229 ); + + void *C_Texto; + +C_Texto = malloc( JD_imagesize(240, 140, 400, 340) ); +S_File = (SFile *)malloc( sizeof(SFile) * 201 ); + +if( C_Texto == NULL || S_File == NULL ) { + closegraph(); + cprintf("\n\rSALIENDO"); + cprintf("\n\rImposible encontrar %ldKbytes en el Heap", ( JD_imagesize(240, 140, 400, 340) + sizeof(SFile)*201 ) ); + return 0; +} + +rasterscan( comodin_name ); + +gettextsettings(&textinfo); + +getimage( 240, 140, 400, 340, C_Texto); + + + Imprime_Estaticos( 10, "FREC.IMG"); // Imprime botones estaticos 'Seccion 20' + + + +settextstyle( SMALL_FONT, HORIZ_DIR, 4); + +setcolor( 1 ); +outtextxy( 250+( ( 141 - textwidth(texto1) ) / 2 ), 150, texto1 ); + +PrintWholeScreen_Files(); +PrintSelectRow( 1 ); + + +while(!ok){ // Bucle infinito + + switch( Comprueba_Secuencia( 4, NULL ) ) { // Iniciamos comprobacion de 2¦ sec + + case 0: // No se pulso ningun BOTON + // Pero el raton fue presionado en + // algun sitio... + break; + case -2: // Hay una tecla normal en BUFFER + switch( key = getch() ) { // La utilizamos + // ESC ( CANCELAR ) + case 27: + inst = 0; + ok = 1; + break; + case 13: + switch( S_File[FileRow + FileCurrTopRow].attrs ) + { + // Si directorio: cambiamos simplemente + case FA_DIREC: + chdir( S_File[FileRow + FileCurrTopRow].files ); + FileRow = FileCurrTopRow = 0; + rasterscan( comodin_name ); + PrintWholeScreen_Files(); + PrintSelectRow( 1 ); + break; + // Si unidad comprobamos que podemos cambiar y como directorio... + case 255: + erroroccurred=0; + olddisk=getdisk(); + setdisk( (S_File[FileRow + FileCurrTopRow].files[0] - 'A') ); + if (erroroccurred) { + setdisk(olddisk); + } else { + FileRow = FileCurrTopRow = 0; + rasterscan( comodin_name ); + PrintWholeScreen_Files(); + PrintSelectRow( 1 ); + } + break; + default: + if ( strcmp(Archivo, S_File[FileRow+FileCurrTopRow].files) == 0 ) + { + if ( Cargar_Salvar == 0 ) { + if ( access(Archivo, 0) != 0) break; + sprintf( comodin_name, "%c:\\", getdisk() + 'A' ); + getcurdir(0,comodin_name+3); + strcat(comodin_name, "\\"); + strcat(comodin_name, Archivo); + inst = 1; + ok = 1; + } + } + strcpy(Archivo, S_File[FileRow+FileCurrTopRow].files); + PrintVisor(); + break; + } + + break; + default: + strcpy( Archivo, "\0" ); + ungetch(key); + InputCadenaG(Archivo, 0, 12, 0, cfgFREC.F_Texto, 252, 171, 373, 178); + if (Cargar_Salvar == 0) + { + // Comprobamos que existe el fichero + if ( access(Archivo, 0) != 0) + strcpy( Archivo, "\0" ); + } + PrintVisor(); + break; + } + break; + case -1: // Hay una tecla especial en BUFFER + getch(); // La eliminamos + break; + // Boton Aceptar + case 2: + if ( Cargar_Salvar == 0 ) { + if ( access(Archivo, 0) != 0) break; + sprintf( comodin_name, "%c:\\", getdisk() + 'A' ); + getcurdir(0,comodin_name+3); + strcat(comodin_name, "\\"); + strcat(comodin_name, Archivo); + inst = 1; + ok = 1; + } else { + if ( access(Archivo, 0) == 0) + if ( Optar( "Fichero Existe", "¨ Reemplazarlo ?","" ) == 0 ) break; + sprintf( comodin_name, "%c:\\", getdisk() + 'A' ); + getcurdir(0,comodin_name+3); + strcat(comodin_name, "\\"); + strcat(comodin_name, Archivo); + inst = 1; + ok = 1; + } + break; + // Boton Cancelar + case 1: + inst = 0; + ok = 1; + break; + // Boton Subir + case 3: + FileUpRow(); + break; + // Boton Bajar + case 4: + FileDownRow(); + break; + default: + while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER + break; + } + +} + +putimage( 240, 140, C_Texto, COPY_PUT); + +free ( C_Texto ); +free ( S_File ); + +settextstyle(textinfo.font, textinfo.direction, textinfo.charsize ); +settextjustify(textinfo.horiz, textinfo.vert); + + setdisk(olddrive); + chdir(oldpath); + + +stopceh(); + +return inst; + +} + + + +unsigned int rasterscan(char *fm) { + struct ffblk ffblk; + char done=0; + unsigned int olddisk; + maxfiles = 0; + +// build a disk drive availiable list + olddisk=getdisk(); + for (int i=1;i<27;i++) if (_chdrive(i) == 0) + { + sprintf( S_File[maxfiles].files, "%c:", (char)('A' + i - 1) ); + S_File[maxfiles].filesize=0; + S_File[maxfiles].attrs=255; // Unidad + if (ffblk.ff_attrib & 16) S_File[maxfiles].filesize=0; + maxfiles++; + + } + setdisk(olddisk); + +// drivelist[2]='N'; //stop access to B drive until I sort out pahntom dive probs +//Ok, Drive B may be a phantom drive. If you try to access drive B, then +//the program looses controll. Bummer! +// needs debugging. (always ignores drive b...) +// asm int 0x11 +// asm mov equipmentlist,ax +// drivelist[2]='N'; +// if ((equipmentlist & 16)) drivelist[2]='Y'; + + + done = findfirst("*.*",&ffblk,FA_DIREC); + while (!done) { + if (ffblk.ff_attrib == 0x10) { + strcpy(S_File[maxfiles].files,ffblk.ff_name); + S_File[maxfiles].filesize=ffblk.ff_fsize; + S_File[maxfiles].attrs=ffblk.ff_attrib; + if (ffblk.ff_attrib & 16) S_File[maxfiles].filesize=0; + maxfiles++; + } + done = findnext(&ffblk); + if (maxfiles==200) done=!done; //stop to prevent internal crashes. + } + + done = findfirst(fm,&ffblk,FA_DIREC); + while (!done) { + if (ffblk.ff_attrib != 0x10) { + strcpy(S_File[maxfiles].files,ffblk.ff_name); + S_File[maxfiles].filesize=ffblk.ff_fsize; + S_File[maxfiles].attrs=ffblk.ff_attrib; + if (ffblk.ff_attrib & 16) S_File[maxfiles].filesize=0; + maxfiles++; + } + done = findnext(&ffblk); + if (maxfiles==200) done=!done; //stop to prevent internal crashes. + } + if (maxfiles==0) { //no files to browse + strcpy(S_File[0].files," -- NONE -- "); + S_File[0].filesize=-1; + maxfiles=1;} + strcpy(S_File[200].files," -- NONE -- "); + S_File[200].filesize=-1; + return maxfiles; +} + + + +void PrintWholeScreen_Files(void ) +{ + + int OldFileRow = FileRow ; + char Contador; + + setfillstyle( SOLID_FILL, 0 ); + bar(252, 187, 374, 327); + + PrintSelectRow ( 0 ); + for ( FileRow = 0; FileRow < 14; FileRow++ ) + if ( ( FileRow + FileCurrTopRow ) < maxfiles ) + PrintSelectRow ( 0 ); + + + FileRow = OldFileRow; + + +} + +void PrintSelectRow( char Hide_Show ) +{ + + char Buffer[80]; + char Buff1[80]; + char Buff2[80]; + + if ( Hide_Show==0 ) + { + setfillstyle( SOLID_FILL, 0 ); + bar(252, 188 + ( FileRow * 10 ) , 373, 187 + 10 + ( FileRow * 10 ) ); + setcolor( cfgFREC.Texto ); + } else { + setfillstyle( SOLID_FILL, cfgFREC.F_Texto ); + bar(252, 188 + ( FileRow * 10 ) , 373, 187 + 10 + ( FileRow * 10 ) ); + setcolor(0); + } + +switch( S_File[FileRow + FileCurrTopRow].attrs ) +{ + case FA_DIREC: + sprintf(Buffer, "%-13s", S_File[FileRow+FileCurrTopRow].files ); + sprintf(Buff1 , " < DIR >" ); + break; + case 255: + sprintf(Buffer, "%-8s", strncpy( Buff1, S_File[FileRow+FileCurrTopRow].files, 8) ); + sprintf(Buff1 , " >DRIVER<" ); + break; + default: + + sprintf(Buffer, "%-13s", S_File[FileRow+FileCurrTopRow].files); +// outtextxy( 252 , 187 + ( FileRow * 10 ) , Buffer ); + sprintf(Buff1 , " %7lu", S_File[FileRow+FileCurrTopRow].filesize ); + break; +} + + outtextxy( 252 , 187 + ( FileRow * 10 ) , Buffer ); + outtextxy( 252 , 187 + ( FileRow * 10 ) , Buff1 ); + +} + +void FileDownRow(void) +{ + + // ¨¨ Estoy en la linea fisica 000 ??? + if ( (FileRow + FileCurrTopRow) != (maxfiles - 1) ) { + + // Linea 0, Baja Con retroceso multiple + if ( FileRow == 13 ) { + FileCurrTopRow += 14; + while ( (FileCurrTopRow + FileRow) > maxfiles ) FileCurrTopRow--; + FileRow = 0; + PrintWholeScreen_Files(); + PrintSelectRow( 1 ); + } else { + PrintSelectRow( 0 ); + FileRow++; + PrintSelectRow( 1 ); + } + + } +} + +void FileUpRow(void) +{ + + // ¨¨ Estoy en la linea fisica 000 ??? + if ( (FileRow + FileCurrTopRow) != 0 ) { + + // Linea 0, Baja Con retroceso multiple + if ( FileRow == 0 ) { + FileCurrTopRow -= 14; + if ( FileCurrTopRow < 0 ) FileCurrTopRow = 0; + FileRow = 0; + PrintWholeScreen_Files(); + FileRow = 13; + PrintSelectRow( 1 ); + } else { + PrintSelectRow( 0 ); + FileRow--; + PrintSelectRow( 1 ); + } + + } +} + + + +/* +void diskerror(void) { +char message[30]; + pushscreen(); + draw3dboxup(19,10,43,6); + draw3dboxdn(21,11,39,4); + switch (erroroccurred) { + case 1 : strcpy(message,"Write Protected Disk"); break; + case 2 : strcpy(message,"Drive Not Ready"); break; + case 3 : strcpy(message,"Unknown Command"); break; + case 4 : strcpy(message,"Data Error (CRC)"); break; + case 5 : strcpy(message,"Bad Request Structure Length"); break; + case 6 : strcpy(message,"Seek Error"); break; + case 7 : strcpy(message,"Unknown Media Type"); break; + case 8 : strcpy(message,"Sector Not Found"); break; + case 9 : strcpy(message,"Printer Out Of Paper"); break; + case 10: strcpy(message,"Write Fault"); break; + case 11: strcpy(message,"Read Fault"); break; + case 12: strcpy(message,"General Failure"); break; + default: strcpy(message,"Unknown Error"); + } + + printcentered(12,"Error - Press any key to continue",0x74); + printcentered(13,message,0x70); + getch(); + popscreen(); + erroroccurred=0; +} +*/ + +void interrupt critical_error_handler(.../*__CPPARGS*/) { + asm push ax //preserve only modified register + asm mov ax,di //di holds error code ranging from 0 to 0x0c +// asm inc ax + asm mov erroroccurred,ax //increase erroroccurred for ease of programming + asm mov al,0x20 + asm out 0x20,al //send interrupt clear flag +// asm pushf // I think I dont need this line in.... + asm pop ax //restore ax +} + +void startceh() { + old_int24 = _dos_getvect( 0x24 ); + _dos_setvect( 0x24, critical_error_handler); + } + +void stopceh() { + _dos_setvect(0x24,old_int24); + } + +void PrintVisor(void) +{ + + setfillstyle( SOLID_FILL, 0 ); + bar(252, 171, 373, 178); + setcolor( cfgFREC.Texto ); + outtextxy(252, 169, strupr(Archivo) ); + +} + + + +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////// +int InputCadenaG(char *s, int numalp, int lmax, int cc, int cf, int left, int up, int right, int down) +{ + + int ls; // longitud cadena + char *s1; // puntero a cadena inicial + int c, ok = 0; + + s1 = s; // inicio cadena + ls = strlen ( s ); // Longitud de actual + s += ls; // se coloca en el final + + setfillstyle(SOLID_FILL, cf); + do{ + bar(left, up, right, down); + setcolor(cc); + outtextxy( left, up-2, s1 ); + if ( ls < lmax ) { + setcolor(4); + outtextxy( left+textwidth( s1 ), up-2, "<"); + } + + + switch( c = getch() ) // obtiene tecla + { + case 0: + case 13: + ok = 1; // 13 = INTRO || Especiales + break; + case 8: + if ( ls > 0 ) { // 8 = Back Space + ls--; + s--; + *s = '\0'; + } + break; + case 27: + *s='\0'; + ok = 1; + break; + default: + if ( !numalp && c >= 32 && c <= 254 && ls < lmax) + { + *s++ = toupper(c); + ls++; + *s = '\0'; + } else + if ( numalp && isdigit(c) && ls < lmax) { + *s++ = c; + ls++; + *s = '\0'; + } + break; + } + + }while(!ok); + + ok = 1; + *s = ' '; + while( ok ) { + if(*s==' ') { *s = '\0'; s--; + } else { s++; ok = 0; } + } + + *s = '\0'; + + while(kbhit()) getch(); // Vacia Buffer impidiendo falsas + // pulsaciones... + + return ls; +} diff --git a/FREC/FRECUTIL.CPP b/FREC/FRECUTIL.CPP new file mode 100644 index 0000000..88ebd30 --- /dev/null +++ b/FREC/FRECUTIL.CPP @@ -0,0 +1,144 @@ +#include + +#include + +#include +#include +#include +#include +#include + +#include "..\..\libs\make_bot\make_bot.h" +#include "frec.h" + +char Optar( char *texto1, char *texto2, char *texto3 ); +int Muestra_Mensaje(int Mensaje, char *file); +//void redefine_cursor_raton(int r_e); + +extern CFG_FREC cfgFREC; + +char Optar( char *texto1, char *texto2, char *texto3 ){ + + int ok = 0, inst = 0; + struct textsettingstype textinfo; + + void *C_Texto, *C_Aceptar, *C_Cancelar; + +C_Texto = malloc( JD_imagesize(200, 212, 440, 267) ); +C_Aceptar = malloc( JD_imagesize(200, 270, 280, 295) ); +C_Cancelar = malloc( JD_imagesize(360, 270, 440, 295) ); + +if( C_Texto == NULL || C_Aceptar == NULL || C_Cancelar == NULL) { + closegraph(); + cprintf("\n\rSALIENDO"); + cprintf("\n\rImposible encontrar %ldKbytes en el Heap", + ( JD_imagesize(118, 160, 521, 335) + + JD_imagesize(118, 160, 521, 335) + + JD_imagesize(118, 160, 521, 335) + ) + ); + exit(SIN_MEMORIA); +} + +gettextsettings(&textinfo); + +settextstyle(SMALL_FONT, HORIZ_DIR, 5 ); +// settextjustify(CENTER_TEXT, CENTER_TEXT); + +getimage(200, 212, 440, 267, C_Texto); +getimage(200, 270, 280, 295, C_Aceptar); +getimage(360, 270, 440, 295, C_Cancelar); + + + Imprime_Estaticos(100, "FREC.DAT"); // Imprime botones estaticos 'Seccion 20' + + Imprime_Secuencia(3); // Imprime secuencia 4. + Imprime_Estaticos(101, "FREC.DAT"); // Imprime textos estaticos 'Seccion 5' + + +setcolor( cfgFREC.Texto ); +outtextxy( 210+( ( 230 - textwidth(texto1) ) / 2 ), 220, texto1 ); +outtextxy( 210+( ( 230 - textwidth(texto2) ) / 2 ), 235, texto2 ); +outtextxy( 210+( ( 230 - textwidth(texto3) ) / 2 ), 250, texto3 ); + +while(!ok){ // Bucle infinito + + switch( Comprueba_Secuencia( 3, NULL ) ) { // Iniciamos comprobacion de 2¦ sec + + case 0: // No se pulso ningun BOTON + // Pero el raton fue presionado en + // algun sitio... + break; + case -2: // Hay una tecla normal en BUFFER + switch( getch() ) { // La utilizamos + // ESC ( CANCELAR ) + case 14: + inst = 0; + ok = 1; + break; + default: + break; + } + break; + case -1: // Hay una tecla especial en BUFFER + getch(); // La eliminamos + break; + // Boton Aceptar + case 1: + inst = 1; + ok = 1; + break; + // Boton Cancelar + case 2: + inst = 0; + ok = 1; + break; + default: + while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER + break; + } + +} + + +putimage(200, 212, C_Texto, COPY_PUT); +putimage(200, 270, C_Aceptar, COPY_PUT); +putimage(360, 270, C_Cancelar, COPY_PUT); + +free ( C_Texto ); +free ( C_Aceptar ); +free ( C_Cancelar ); + + +settextstyle(textinfo.font, textinfo.direction, textinfo.charsize ); +settextjustify(textinfo.horiz, textinfo.vert); + +return inst; + + + +} + + + +int Muestra_Mensaje(int Mensaje, char *file) { + void *Imagen; + + + if ( (Imagen = malloc( JD_imagesize(200, 212, 440, 267) ) ) == NULL ) { + Espera_TeclaRaton(); + Anclar_Raton(); + return -1; + } else { + getimage( 200, 212, 440, 267, Imagen ); + Imprime_Estaticos( Mensaje, file); +// Fichero_bot( Mensaje ); + + Espera_TeclaRaton(); + Anclar_Raton(); + putimage( 200, 212, Imagen, COPY_PUT); + free(Imagen); + return 1; + } +} + diff --git a/FREC/FREC_F.CPP b/FREC/FREC_F.CPP new file mode 100644 index 0000000..b210129 --- /dev/null +++ b/FREC/FREC_F.CPP @@ -0,0 +1,715 @@ +#include +#include +#include + + +#include "dibujos.h" + +#define _FREC_F_H + #include "FREC_F.h" +#undef _FREC_F_H + +#include "FREC.h" + +int SaltosMatrixX = 10, // Saltos en la Matrix X + SaltosMatrixY = 10; // Saltos en la Matrix Y + +int IncrementoMarca = 2; // Incrementos en el despl. de marcas + +long MRK_begin=20, MRK_end=50, // Marcas de comienzo y final originales + oldMRK_begin = MRK_begin, // >>>>>>>>>>>>>>>>>>>>>>>>>>> + oldMRK_end = MRK_end; // >>> marcas de arrastre >>> + +char GenOsc = GENERADOR, // determina para quien son los controles + GenOscf[2] = { OFF, OFF }; // quien est  funcionando ahora + +int Desplazamiento = 0, // Desplazamiento virtual de la onda + mAnchoMarco = 125; // Ancho a mostrar ( reducido ) + +long oDesde = 0, // Inicio de la onda a mostrar + oHasta = (mAnchoMarco*5); // Fin de la onda a mostrar + +int oAncho = oAnchoVentana, // Ancho de la ventana de visualizaci¢n + oAlto = oAltoVentana; // Alto de la ventana de vizualizaci¢n + // Cero de la onda Generada + +int ceroOGenerada = ( oAltoVentana / 2 ) + 2; + +char Tonda = -1; // Tipo de onda a tratar +int Dispersion = 1; // Dispercion entre puntos + + +/***************************************************************************\ +|* *| +|* SeleccionaControles *| +|* *| +|* Descripci¢n: *| +|* Selecciona para quien trabajaran casi todos los controles *| +|* para el generador o el osciloscopio. *| +|* *| +|* Entradas: (ninguna) *| +|* Salidas: (ninguna) *| +|* *| +\***************************************************************************/ +void SeleccionaControles(void) +{ + // Borramos la zona de funcion + setfillstyle( SOLID_FILL, EGA_LIGHTGRAY ); + bar( 318, 3, 337, 21 ); + if ( GenOsc == GENERADOR ) + { + GenOsc = OSCILOSCOPIO; + ponicono( 319, 3, flecha, 1 ); // Flecha dentro + // Led Off / On + if ( GenOscf[OSCILOSCOPIO] == OFF ) + ponicono( 245, 7, led_off, 1 ); + else + ponicono( 245, 7, led_on, 1 ); + } else { + GenOsc = GENERADOR; + ponicono( 319, 3, flecha, 3 ); // Flecha fuera + // Led Off / On + if ( GenOscf[GENERADOR] == OFF ) + ponicono( 245, 7, led_off, 1 ); + else + ponicono( 245, 7, led_on, 1 ); + } +} + +/***************************************************************************\ +|* *| +|* EnviaRecibe *| +|* *| +|* Descripci¢n: *| +|* Activa/Desactiva la funci¢n de enviar/recibir onda. *| +|* ( seg£n este seleccionado osciloscopio/generador ) *| +|* *| +|* Entradas: (ninguna) *| +|* Salidas: (ninguna) *| +|* *| +\***************************************************************************/ +void EnviaRecibe(void) +{ + // Enviar/Recibir onda SI / NO + GenOscf[ GenOsc ] = !GenOscf[ GenOsc ]; + if ( GenOscf[ GenOsc ] == OFF ) + ponicono( 245, 7, led_off, 1 ); + else + ponicono( 245, 7, led_on, 1 ); +} + +/***************************************************************************\ +|* *| +|* DesplazaMarca *| +|* *| +|* Descripci¢n: *| +|* Realiza la funci¢n de dezplazamiento de la marca, con *| +|* los cursores, y selecci¢n de toda la onda. *| +|* *| +|* Entradas: *| +|* Incremento en el desplazamiento (puede se negativo) *| +|* Marca a desplazar: INICIO, FIN, TODO (marca toda la onda) *| +|* *| +|* Salidas: (ninguna) *| +|* *| +\***************************************************************************/ +void DesplazaMarca( char IncrementoMarca, char InicioFin ) +{ + if ( InicioFin == INICIO ) + { + if ( IncrementoMarca > 0 ) + { + MRK_begin += IncrementoMarca; + while ( MRK_begin > MRK_end ) MRK_begin--; + if ( MRK_begin > (oAnchoVentana * oVentanas) ) + MRK_begin = (oAnchoVentana * oVentanas); + Dibuja_OndaSeleccionada( !PINTA ); + } else + if ( IncrementoMarca < 0 ) + { + MRK_begin += IncrementoMarca; + if ( MRK_begin < 0 ) + MRK_begin = 0; + Dibuja_OndaSeleccionada( !PINTA ); + } + } else if ( InicioFin == FIN ) + { + if ( IncrementoMarca > 0 ) + { + MRK_end +=IncrementoMarca; + if ( MRK_end > (oAnchoVentana * oVentanas) ) + MRK_end = (oAnchoVentana * oVentanas); + Dibuja_OndaSeleccionada( !PINTA ); + } else + if ( IncrementoMarca < 0 ) + { + MRK_end +=IncrementoMarca; + while ( MRK_end < MRK_begin ) MRK_end ++; + if ( MRK_end < 0 ) + MRK_end = 0; + Dibuja_OndaSeleccionada( !PINTA ); + } + } else { + Dibuja_OndaSeleccionada(PINTA); + MRK_begin = 0; + MRK_end = oAnchoVentana * oVentanas; + Dibuja_OndaSeleccionada(PINTA); + } + + +} + + +/***************************************************************************\ +|* *| +|* Dibuja_OndaSeleccionada *| +|* *| +|* Descripci¢n: *| +|* Dibuja la onda seleccionada. *| +|* *| +|* Entradas: *| +|* PINTA Redibuja la selecci¢n completa. *| +|* !PINTA Solo dibuja lo que ha cambiado. *| +|* *| +|* Salidas: (ninguna) *| +|* *| +\***************************************************************************/ +void Dibuja_OndaSeleccionada( char QueHago ) +{ + float xActual; + int xReal, yReal; + float ReduccionX;//, ReduccionYmini; + static float oldHasta, oldDesde; + //static long OldDesplazamiento; + static char PintaBorra = PINTA; + + char tmp, buffer[80]; + + if ( QueHago != PINTA ) + { + tmp = PintaBorra; + PintaBorra = PINTA; + } + // Calculamos el factor de reducci¢n para el ancho de la ventana + if ( PintaBorra == PINTA ) + ReduccionX = (float)(oHasta - oDesde) / (float)oAnchoVentana; + else + ReduccionX = (float)( oldHasta - oldDesde ) / (float)oAnchoVentana; + +// ReduccionYmini = (float) oAlto / (float)oAltoVentana; + + setwritemode( XOR_PUT ); + setcolor( cfgFREC.oSelect ); + + for ( xActual = (PintaBorra == PINTA ? (oDesde + 5 * Desplazamiento ) : oldDesde ), xReal = 0; xReal < oAnchoVentana; xActual += ReduccionX, xReal ++ ) + if ( QueHago == PINTA ) + { + if ( xActual >= (PintaBorra == PINTA ? MRK_begin : oldMRK_begin ) && xActual <= (PintaBorra == PINTA ? MRK_end : oldMRK_end) ) + line ( xReal + inicioMGx, inicioMGy + SaltosMatrixY, xReal + inicioMGx, inicioMGy+oAltoVentana - SaltosMatrixY ); + } else { + // Dibuja solo lo necesario de la onda marcada... + if ( + ( xActual >= oldMRK_begin && xActual < MRK_begin ) || + ( xActual < oldMRK_begin && xActual >= MRK_begin ) || + + ( xActual > oldMRK_end && xActual <= MRK_end ) || + ( xActual <= oldMRK_end && xActual > MRK_end ) + ) + line ( xReal + inicioMGx, inicioMGy + SaltosMatrixY, xReal + inicioMGx, inicioMGy+oAltoVentana - SaltosMatrixY ); + + } + + setwritemode( COPY_PUT ); + + if ( PintaBorra == PINTA ) + { + oldHasta = oHasta + 5*Desplazamiento; + oldDesde = oDesde + 5*Desplazamiento; + oldMRK_begin = MRK_begin; + oldMRK_end = MRK_end; + PintaBorra = BORRA; + } else PintaBorra = PINTA; + + if ( QueHago != PINTA ) + { + PintaBorra = tmp; + sprintf( buffer, "Selct: %05ld", ( MRK_end-MRK_begin ) ); + Fuente_Amplia( buffer, &Letras ); + } + +}; + +/***************************************************************************\ +|* *| +|* DesplazaOnda *| +|* *| +|* Descripci¢n: *| +|* Mueve la onda en cualquier direcci¢n o la centra vertic. *| +|* *| +|* Entradas: *| +|* Lugar a donde ser  movida. ARRIBA, ABAJO, IZQUIERDA *| +|* DERECHA, CENTRAR. *| +|* *| +|* Salidas: (ninguna) *| +|* *| +\***************************************************************************/ +void DesplazaOnda( char Lugar ) +{ + int oldCero = ceroOGenerada, xM; + float xActual; + int xReal; + float ReduccionX, ReduccionYmini; + + switch( Lugar ) + { + case DERECHA: + // Limpiamos la zona antigua + setwritemode( XOR_PUT ); + setcolor( cfgFREC.mMarco ); + rectangle( 8 + Desplazamiento, inicioMmGy, 8 + mAnchoMarco + Desplazamiento, inicioMmGy + mAltoCuadro ); + Desplazamiento += 5; if ( ( mAnchoMarco + Desplazamiento ) > oAnchoVentana ) Desplazamiento = oAnchoVentana - mAnchoMarco; + + rectangle( 8 + Desplazamiento, inicioMmGy, 8 + mAnchoMarco + Desplazamiento, inicioMmGy + mAltoCuadro ); + setwritemode( COPY_PUT ); + // Tras desplazar redibujamos la onda + DibujaOnda(oDesde + 5 * Desplazamiento, oHasta + 5 * Desplazamiento, oAnchoVentana, oAltoVentana, GRANDEo ); + break; + case IZQUIERDA: + // Limpiamos la zona antigua + setwritemode( XOR_PUT ); + setcolor( cfgFREC.mMarco ); + rectangle( 8 + Desplazamiento, inicioMmGy, 8 + mAnchoMarco + Desplazamiento, inicioMmGy + mAltoCuadro ); + Desplazamiento -= 5; if ( Desplazamiento < 0 ) Desplazamiento = 0; + + rectangle( 8 + Desplazamiento, inicioMmGy, 8 + mAnchoMarco + Desplazamiento, inicioMmGy + mAltoCuadro ); + setwritemode( COPY_PUT ); + // Tras desplazar redibujamos la onda + DibujaOnda(oDesde + 5 * Desplazamiento, oHasta + 5 * Desplazamiento, oAnchoVentana, oAltoVentana, GRANDEo ); + break; + case ARRIBA: + case ABAJO: + case CENTRAR: + // Tras desplazar redibujamos la onda + // Con una nueva funcion que tenga en cuenta la nueva funci¢n. + + switch( Lugar ) + { + case ARRIBA: ceroOGenerada -= 5; break; + case CENTRAR: ceroOGenerada = ( oAltoVentana / 2 ) + 2; break; + case ABAJO: ceroOGenerada += 5; break; + } + + // Calculamos el factor de reducci¢n para el ancho de la ventana + ReduccionX = (float)( oHasta - oDesde ) / (float)oAnchoVentana; + + for ( xActual = oDesde + 5 * Desplazamiento, xReal = 0; xReal < oAnchoVentana; xActual += ReduccionX, xReal ++ ) + { + if ( oOndaGenerada[xReal] >= inicioMGy && oOndaGenerada[xReal] <= inicioMGy + oAltoVentana ) + // Si vez es cero no restauramos el viejo contenido, ya que no existe + putpixel( xReal + inicioMGx, oOndaGenerada[xReal], cOndaGenerada[xReal] ); + + // Borramos la linea del cero antigua + if ( ( inicioMGy+oldCero ) >= inicioMGy && ( inicioMGy + oldCero ) <= ( inicioMGy + oAltoVentana) ) + if ( oldCero % SaltosMatrixY ) + putpixel( xReal + inicioMGx, oldCero + inicioMGy, EGA_BLACK ); + else + putpixel( inicioMGx + xReal, inicioMGy + oldCero, ( ( xReal % SaltosMatrixX ) ? EGA_BLACK : cfgFREC.gMatrix )); + // Colocamos la nueva + if ( ( inicioMGy+ceroOGenerada ) >= inicioMGy && ( inicioMGy + ceroOGenerada ) <= ( inicioMGy + oAltoVentana) ) + if ( ceroOGenerada % SaltosMatrixY ) + putpixel( xReal + inicioMGx, ceroOGenerada + inicioMGy, cfgFREC.gMatrix ); + else + putpixel( xReal + inicioMGx, ceroOGenerada + inicioMGy, ( ( xReal % SaltosMatrixX ) ? cfgFREC.gMatrix : EGA_BLACK )); + + oOndaGenerada[xReal] = OndaGenerada[(int)xActual] + ceroOGenerada + inicioMGy; + + if ( oOndaGenerada[xReal] >= inicioMGy && oOndaGenerada[xReal] <= ( inicioMGy + oAltoVentana ) ) + { + + cOndaGenerada[xReal] = (char)getpixel( xReal + inicioMGx, oOndaGenerada[xReal] ); + putpixel( xReal + inicioMGx, oOndaGenerada[xReal], cfgFREC.gOnda ); + } + } // BUCLE FOR + +// DibujaOnda(oDesde + 5 * Desplazamiento, oHasta + 5 * Desplazamiento, oAnchoVentana, oAltoVentana, GRANDEo ); + Redibuja_MiniOnda(); + break; + } + +} + +/***************************************************************************\ +|* *| +|* ReajusteTierra *| +|* *| +|* Descripci¢n: *| +|* Ajusta el nivel de continua *| +|* *| +|* Entradas: *| +|* Ajuste hacia ARRIBA - ABAJO *| +|* *| +|* Salidas: (ninguna) *| +|* *| +\***************************************************************************/ +void ReajusteTierra( char aDonde ) +{ + int x; + + for ( x = 0; x < (oAnchoVentana * oVentanas); x++ ) + if ( aDonde == ARRIBA) + OndaGenerada[ x ] --; + else + if ( aDonde == ABAJO ) + OndaGenerada[ x ] ++; + + DibujaOnda(oDesde + 5 * Desplazamiento, oHasta + 5 * Desplazamiento, oAnchoVentana, oAltoVentana, GRANDEo ); + Redibuja_MiniOnda(); + +}; + +/***************************************************************************\ +|* *| +|* DibujaOnda *| +|* *| +|* Descripci¢n: *| +|* Dibuja la onda, teniendo encuenta lo que hay detras *| +|* *| +|* Entradas: *| +|* Origen de la onda *| +|* Final de la onda *| +|* Ancho de la ventana *| +|* Alto de la ventana *| +|* Tipo de Onda ( GRANDE / REDUCIDA ) *| +|* *| +|* *| +|* Salidas: (ninguna) *| +|* *| +\***************************************************************************/ +void DibujaOnda( int Desde, int Hasta, int Ancho, int Alto, char GrandeMini ) +{ + static char vez1 = 0; + static char vez2 = 0; + float xActual; + int xReal, yReal; + float ReduccionX, ReduccionYmini; + + // Si esta activada la funci¢n de selecci¢n... + // Borramos la marca + if ( statusBoton == 17 && GrandeMini == GRANDEo ) + Dibuja_OndaSeleccionada(PINTA); + + // Calculamos el factor de reducci¢n para el ancho de la ventana + ReduccionX = (float)( Hasta - Desde ) / (float)oAnchoVentana; + + + ReduccionYmini = (float) Alto / (float)oAltoVentana; + + for ( xActual = Desde, xReal = 0; xReal < Ancho; xActual += ReduccionX, xReal ++ ) + { + + if ( GrandeMini == GRANDEo ) + { + + if ( oOndaGenerada[xReal] >= inicioMGy + && oOndaGenerada[xReal] <= inicioMGy + oAltoVentana + // Si vez es cero no restauramos el viejo contenido, ya que no existe + && ( vez1 != 0 ) ) + putpixel( xReal + inicioMGx, oOndaGenerada[xReal], cOndaGenerada[xReal] ); + else vez1 = 1; + + oOndaGenerada[xReal] = OndaGenerada[(int)xActual] + ceroOGenerada + inicioMGy; + if ( oOndaGenerada[xReal] >= inicioMGy + && oOndaGenerada[xReal] <= ( inicioMGy + oAltoVentana ) ) + { + + cOndaGenerada[xReal] = (char)getpixel( xReal + inicioMGx, oOndaGenerada[xReal] ); + putpixel( xReal + inicioMGx, oOndaGenerada[xReal], cfgFREC.gOnda ); + } + } else { + if ( mOndaGenerada[xReal] >= inicioMmGy + && mOndaGenerada[xReal] <= ( inicioMmGy + mAltoCuadro ) + // Si vez es cero no restauramos el viejo contenido, ya que no existe + && ( vez2 != 0 ) ) + putpixel( xReal + inicioMGx, mOndaGenerada[xReal], cfgFREC.mFondo ); + else vez2 = 1; + + mOndaGenerada[xReal] = (int)( ( OndaGenerada[(int)xActual] + ceroOGenerada ) * ReduccionYmini + inicioMmGy ); + if ( mOndaGenerada[xReal] >= inicioMmGy + && mOndaGenerada[xReal] <= ( inicioMmGy + mAltoCuadro ) ) + putpixel( xReal + inicioMGx, mOndaGenerada[xReal], cfgFREC.mOnda ); + + } // SI GrandeMini + } // BUCLE FOR + + // Redibujamos la marca + if ( statusBoton == 17 && GrandeMini == GRANDEo ) + Dibuja_OndaSeleccionada(PINTA); + +} + +/***************************************************************************\ +|* *| +|* Redibuja_MiniOnda *| +|* *| +|* Descripci¢n: *| +|* Dibuja la minionda, teniendo en cuenta no machacar el *| +|* cuadro de desplazamiento *| +|* *| +|* Entradas: (ninguna) *| +|* *| +|* Salidas: (ninguna) *| +|* *| +\***************************************************************************/ +void Redibuja_MiniOnda(void) +{ + // Cuadro onda visible + setcolor( cfgFREC.mMarco ); setwritemode( XOR_PUT ); + rectangle( 8 + Desplazamiento, inicioMmGy, 8 + mAnchoMarco + Desplazamiento, inicioMmGy + mAltoCuadro ); + setwritemode( COPY_PUT ); + + DibujaOnda( 0, oFinalOnda, oAnchoVentana, mAltoCuadro, MINIo ); + + // Cuadro onda visible + setcolor( cfgFREC.mMarco ); setwritemode( XOR_PUT ); + rectangle( 8 + Desplazamiento, inicioMmGy, 8 + mAnchoMarco + Desplazamiento, inicioMmGy + mAltoCuadro ); + setwritemode( COPY_PUT ); + +} + + + +/***************************************************************************\ +|* *| +|* ReajustaTipoOnda *| +|* *| +|* Descripci¢n: *| +|* Inicia la creaci¢n/tratamiento de un tipo de onda *| +|* ya predefinido... *| +|* *| +|* Entradas: *| +|* PorDonde_ Punto de la onda a retocar, (amplitud-periodo) *| +|* (indirectamente recibe tambien el tipo de onda predefinida) *| +|* *| +|* Salidas: (ninguna) *| +|* *| +\***************************************************************************/ +void ReajustaTipoOnda( int PorDonde ) +{ + float xReal, xVirtual, xAux; + float xVirtual2; + static int count = 0, Tampl = 50; + static float Tperd = 0.05; + +switch( Tonda ) +{ + case -1: + switch( PorDonde ) + { + case ARRIBA: + case ABAJO: + for ( xReal = MRK_begin; xReal <= MRK_end; xReal++ ) + { + if ( PorDonde == ARRIBA ) + { + OndaGenerada[ xReal ] *= 2; + OndaGenerada[ xReal ] ++; + } else { + OndaGenerada[ xReal ] --; + OndaGenerada[ xReal ] /= 2; + } + } + count = 0; + break; + case IZQUIERDA: + for ( xReal = xVirtual = MRK_begin; xReal <= MRK_end && xVirtual <= MRK_end; xReal++, xVirtual += IncrementoMarca ) + OndaGenerada[ xReal ] = OndaGenerada[ xVirtual ]; + if ( xReal != MRK_end ) + for ( xReal, xVirtual = MRK_begin; xReal <= MRK_end; xReal++, xVirtual++ ) + OndaGenerada[ xReal ] = OndaGenerada[ xVirtual ]; + count = 0; + break; + case DERECHA: + for ( xReal = MRK_end; xReal >= MRK_begin; xReal-=(IncrementoMarca+count) ) + for ( xVirtual = (IncrementoMarca+count); xVirtual > 0 && (xReal-xVirtual+1)>=MRK_begin; xVirtual-- ) + OndaGenerada[ xReal - xVirtual + 1 ] = OndaGenerada[ xReal ]; + count = (count++) % 32; + break; + } + break; + case 2: + switch( PorDonde ) + { + case ARRIBA: + case ABAJO: + Tampl += (PorDonde == ARRIBA) ? 1 : -1; + break; + case IZQUIERDA: + case DERECHA: + Tperd += (PorDonde == IZQUIERDA) ? 0.01 : -0.01; + break; + case CENTRAR: + Tampl = 50; + Tperd = 0.05; + break; + + } + for ( xReal = MRK_begin; xReal <= MRK_end; xReal++ ) + OndaGenerada[ xReal ] = (int)(sin( xReal * Tperd ) * Tampl); + break; + case 3: + switch( PorDonde ) + { + case ARRIBA: + case ABAJO: + Tampl += (PorDonde == ARRIBA) ? 1 : -1; + break; + case IZQUIERDA: + case DERECHA: + if ( Tperd <= 1 ) + Tperd += (PorDonde == IZQUIERDA) ? -0.1 : 0.1; + else + Tperd += (PorDonde == IZQUIERDA) ? -1 : 1; + if ( Tperd <= 0.1 ) Tperd = 0.1; + break; + case CENTRAR: + Tampl = 50; + Tperd = 0.5; + break; + + } + count = 0; + for ( xReal = MRK_begin; xReal <= MRK_end; ) + { + count = !count; + if ( Tperd >= 1 ) + for ( xVirtual= ( !count ? (-1) : 1 ) * ( Tampl / 2 ); xReal <= MRK_end && (xVirtual*( !count ? (1) : (-1) )) < (Tampl/2) ; xVirtual += ( !count ? 1 : (-1) ) * Dispersion ) + for ( xAux = Tperd; xReal <= MRK_end && xAux>=0; xReal++, xAux-- ) + OndaGenerada[ xReal ] = (int)xVirtual; + else + for ( xVirtual= ( !count ? (-1) : 1 ) * ( Tampl / 2 ); xReal <= MRK_end && (xVirtual*( !count ? (1) : (-1) )) < (Tampl/2) ; xReal+=Tperd, xVirtual += ( !count ? 1 : (-1) ) * Dispersion ) + OndaGenerada[ xReal ] = (int)xVirtual; + + } + break; + case 1: + case 4: + switch( PorDonde ) + { + case ARRIBA: + case ABAJO: + Tampl += (PorDonde == ARRIBA) ? 1 : -1; + break; + case IZQUIERDA: + case DERECHA: + Tperd += (PorDonde == IZQUIERDA) ? -1 : 1; + if ( Tperd <= 0 ) Tperd = 1; + break; + case CENTRAR: + Tampl = 50; + Tperd = 50; + break; + + } + count = 0; + for ( xReal = MRK_begin; xReal <= MRK_end; ) + { + count = !count; + + // Pinto la linea Continua 'Positiva' + for ( xVirtual = 0; xReal <= MRK_end && xVirtual <= Tperd; xReal++, xVirtual++ ) + OndaGenerada[ xReal ] = ( !count ? (-1) : 1 ) * ( Tampl / 2 ); + if( Tonda == 4 ) + for ( xVirtual= ( !count ? (-1) : 1 ) * ( Tampl / 2 ); xReal <= MRK_end && (xVirtual*( !count ? (1) : (-1) )) < (Tampl/2) ; xReal++, xVirtual += ( !count ? 1 : (-1) ) * Dispersion) + OndaGenerada[ xReal ] = xVirtual; + + } + break; + case 6: + case 7: + case 8: + case 9: + + switch( PorDonde ) + { + case ARRIBA: + case ABAJO: + Tampl += (PorDonde == ARRIBA) ? 1 : -1; + break; + case IZQUIERDA: + case DERECHA: + Tperd += (PorDonde == IZQUIERDA) ? 0.0005 : -0.0005; + if ( Tperd < 0.0005 ) Tperd = 0.0005; + break; + case CENTRAR: + Tampl = 50; + Tperd = 0.05; + break; + + } + + count = Tonda==6 ? 0 : -1; + for ( xReal = MRK_begin; xReal <= MRK_end; ) + { + xVirtual = 0; + while ( xVirtual*Tperd < ( ( (Tonda==6) || (Tonda==8) )?(M_PI):(M_PI+.5*M_PI)) ) xVirtual++; + + for ( ; (xVirtual*Tperd) < (( (Tonda==6) || (Tonda==8) )?(M_PI+0.5*M_PI):(M_PI*2)) && xReal <= MRK_end; xVirtual++, xReal++ ) + OndaGenerada[ xReal ] = (int)( sin(xVirtual*Tperd)*Tampl ) + (Tampl/2); + if ( Tonda != 8 && Tonda != 9 ) + for ( xVirtual= ( !count ? (-1) : 1 ) * ( Tampl/2 ); xReal <= MRK_end && (xVirtual*( !count ? (1) : (-1) )) < (Tampl/2) ; xReal++, xVirtual += ( !count ? 1 : (-1) ) * Dispersion) + OndaGenerada[ xReal ] = xVirtual; + } + break; +} + + DibujaOnda(oDesde + 5 * Desplazamiento, oHasta + 5 * Desplazamiento, oAnchoVentana, oAltoVentana, GRANDEo ); + +} +/***************************************************************************\ +|* *| +|* Retoca_Punto *| +|* *| +|* Descripci¢n: *| +|* Retoca el punto dado como par metro con el consiguiente *| +|* arrastre de puntos adyacentes, hasta que los adyacentes *| +|* disten del punto anterior, como m ximo, disperici¢n / 2 *| +|* *| +|* *| +|* Entradas: Punto del periodo a retocar Px *| +|* Punto de la amplitud a '' Ay *| +|* *| +|* Salidas: (ninguna) *| +|* *| +\***************************************************************************/ +void Retoca_Punto( int Px, int Ay ) +{ + int old_Px; // Variables guia de la onda + char inc; // Infome sobre el incremento de la onda ( ASCENDENTE / DESCENDENTE ) + + old_Px = Px; + + OndaGenerada[Px] = Ay; // Ajustamos el nuevo valor de un punto ( usr des ) + + // 1§ Acerco por la derecha del punto a retocar + while ( abs( OndaGenerada[old_Px+1] - OndaGenerada[old_Px] ) > Dispersion && old_Px < oAnchoVentana*oVentanas ) + { + if ( OndaGenerada[old_Px+1] > OndaGenerada[old_Px] ) inc = -1; else inc = 1; + while ( abs( OndaGenerada[old_Px+1] - OndaGenerada[old_Px] ) > Dispersion ) + OndaGenerada[old_Px+1] += inc; + old_Px ++; + }; + + old_Px = Px; + + // 2§ Acerco por la izquierda del punto a retocar + while ( abs( OndaGenerada[old_Px] - OndaGenerada[old_Px-1] ) > Dispersion && old_Px > 0 ) + { + if ( OndaGenerada[old_Px] > OndaGenerada[old_Px-1] ) inc = 1; else inc = -1; + while ( abs( OndaGenerada[old_Px] - OndaGenerada[old_Px-1] ) > Dispersion ) + OndaGenerada[old_Px-1] += inc; + old_Px --; + }; + + DibujaOnda(oDesde + 5 * Desplazamiento, oHasta + 5 * Desplazamiento, oAnchoVentana, oAltoVentana, GRANDEo ); + +} diff --git a/FREC/FREC_F.H b/FREC/FREC_F.H new file mode 100644 index 0000000..5c011c0 --- /dev/null +++ b/FREC/FREC_F.H @@ -0,0 +1,75 @@ +#define MODULO extern + +#if defined (_FREC_F_H) + #undef MODULO + #define MODULO +#endif + + + +#define GENERADOR 1 // selecciona el GENERADOR +#define OSCILOSCOPIO 0 // selecciona el OSCILOSCOPIO + +#define ON 1 // activado +#define OFF 0 // desactivado + +#define INICIO -1 // Seleccion de marca Inicio +#define TODO 0 // TODA +#define FIN 1 // Fin + +#define IZQUIERDA 3 // Desplazamientos Arriba +#define DERECHA 4 // Desplazamientos Arriba +#define ARRIBA 0 // Desplazamientos Arriba +#define CENTRAR 1 // Centrar +#define ABAJO 2 // Abajo + +#define PINTA -125 // Pinta +#define BORRA -126 // Borra + + +extern int SaltosMatrixX, // Saltos en la Matrix X + SaltosMatrixY; // Saltos en la Matrix Y + +extern long MRK_begin, MRK_end, // Marcas de comienzo y final originales + oldMRK_begin, // >>>>>>>>>>>>>>>>>>>>>>>>>>> + oldMRK_end; // >>> marcas de arrastre >>> + +extern char GenOsc, // para quien son los controles + GenOscf[2]; // quien est  funcionando ahora + +extern int IncrementoMarca; // incremento al desplazar la marca + + +// Variables para la onda GENERADA + +MODULO int *OndaGenerada; // OndaGrande ( Puntero a la onda completa ) +MODULO int *oOndaGenerada; // Fondo de la Onda GRANDEo y MINIo +MODULO char *cOndaGenerada; // Fondo Mini Onda +MODULO int *mOndaGenerada; // Fondo de la Onda GRANDEo y MINIo + +extern long oDesde, // Inicio de la onda a mostrar + oHasta; // Fin de la onda a mostrar + +extern int oAncho, // Ancho de la ventana de visualizaci¢n + oAlto; // Alto de la ventana de vizualizaci¢n + +extern int ceroOGenerada; // Cero de la onda Generada + +extern int Desplazamiento, // Desplazamiento virtual de la onda + mAnchoMarco; // Ancho a mostrar ( reducido ) + +extern char Tonda; // Tipo de onda a tratar +extern int Dispersion; // Dispercion entre puntos + +void EnviaRecibe( void ); +void Redibuja_MiniOnda( void ); +void DesplazaOnda( char Lugar ); +void SeleccionaControles( void ); +void ReajusteTierra( char aDonde ); +void Retoca_Punto( int Px, int Ax ); +void ReajustaTipoOnda( int PorDonde ); +void Dibuja_OndaSeleccionada( char QueHago ); +void DesplazaMarca( char IncrementoMarca, char InicioFin ); +void DibujaOnda( int Desde, int Hasta, int Ancho, int Alto, char GrandeMini ); + + diff --git a/FREC/FREC_J.CPP b/FREC/FREC_J.CPP new file mode 100644 index 0000000..2051120 --- /dev/null +++ b/FREC/FREC_J.CPP @@ -0,0 +1,223 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "..\..\libs\make_bot\make_bot.h" +#include "frec.h" +#include "dibujos.h" +#include "frec_f.h" + + +extern CFG_FREC cfgFREC; +extern int Dispersion; // En el juego la dispersi¢n es la velocidad +extern int Sensibilidad; // Para sensibilidad > 1, dos jugadores..... + +typedef struct +{ + int *x; + int *y; + char direccion; + char vidas; +} JUGADORES; + +JUGADORES J1;// = { 40, ( oAltoVentana / 2 ) + 2 + 135, 6, 3 }; +JUGADORES J2;// = { 600, ( oAltoVentana / 2 ) + 2 + 135, 4, 3 }; + +void LimpiaTablero(void); +int MoverJugador( JUGADORES *Jug, int color ); +void AnalizaTeclas( JUGADORES *J1, JUGADORES *J2 ); + +int numero; + +void JuegoTRON(void) +{ + int muertes = 0; + char Buffer[80]; + + // Asignamos memoria para las lineas + if ( ( J1.x = (int *)malloc( 1502*sizeof( int ) ) ) == NULL ) return; + if ( ( J1.y = (int *)malloc( 1502*sizeof( int ) ) ) == NULL ) return; + if ( ( J2.x = (int *)malloc( 1502*sizeof( int ) ) ) == NULL ) return; + if ( ( J2.y = (int *)malloc( 1502*sizeof( int ) ) ) == NULL ) return; + + LimpiaTablero(); + /**************************************************************************/ + setcolor( 13 ); + rectangle( 9, 134, 626, 275 ); + /**************************************************************************/ + + + numero = 1500; + J1.x[numero] = 40; J2.x[numero] = 600; + J1.y[numero] = J2.y[numero] = ( oAltoVentana / 2 ) + 2 + 135; + J1.direccion = 6; J2.direccion = 4; + J1.vidas = J2.vidas = 3; + sprintf( Buffer, "Puntos: %d - %d", J1.vidas, J2.vidas ); + Fuente_Amplia( Buffer, &Letras ); + + // Comienza el juego mientras a alguno le quede alguna vida + while( J1.vidas > 0 && J2.vidas > 0 ) + { + numero--; + if ( numero < 0 ) + { + J1.x[1501] = J1.x[numero+1]; + J1.y[1501] = J1.y[numero+1]; + J2.x[1501] = J2.x[numero+1]; + J2.y[1501] = J2.y[numero+1]; + + for ( numero = 0; numero < 1500; numero++ ) + { + putpixel( J1.x[numero], J1.y[numero], EGA_BLACK ); + putpixel( J2.x[numero], J2.y[numero], EGA_BLACK ); + } + numero = 1500; + fflush(stdin); + } + Numero_Digital( numero, &Numeros ); + + AnalizaTeclas( &J1, &J2 ); + + // Movemos al 1er Jugador + if ( MoverJugador( &J1, cfgFREC.gOnda ) ) { J1.vidas--; muertes = 1; } + // Movemos al 2¦ Jugador + if ( MoverJugador( &J2, cfgFREC.mFondo ) ) { J2.vidas--; muertes = 1; } + + if ( muertes != 0 ) + { + muertes = 0; + for ( ; numero <= 1500; numero++ ) + { + putpixel( J1.x[numero], J1.y[numero], EGA_BLACK ); + putpixel( J2.x[numero], J2.y[numero], EGA_BLACK ); + } + numero = 1500; + J1.x[numero] = 40; J2.x[numero] = 600; + J1.y[numero] = J2.y[numero] = ( oAltoVentana / 2 ) + 2 + 135; + J1.direccion = 6; J2.direccion = 4; + // Inicializamos el tablero + LimpiaTablero(); + sprintf( Buffer, "Puntos: %d - %d", J1.vidas, J2.vidas ); + + Fuente_Amplia( Buffer, &Letras ); + fflush(stdin); + } + + delay( Dispersion * 2 ); + + }; + + free( J1.x ); + free( J1.y ); + free( J2.x ); + free( J2.y ); + + bar( 9, 134, 626, 275 ); + LimpiaTablero(); + DesplazaOnda( CENTRAR ); + +} + +int MoverJugador( JUGADORES *Jug, int color ) +{ + int Estado = 0; // 0 VIVO 1 MUERTO + + // Imprimimos 1pixel de cola para el jugador + putpixel( Jug -> x[numero+1], Jug -> y[numero+1], color ); + + // Movemos al jugador + switch( Jug -> direccion ) + { + case 8: + Jug -> y[numero] = Jug -> y[numero+1] - 1; + Jug -> x[numero] = Jug -> x[numero+1] ; + break; + case 2: + Jug -> y[numero] = Jug -> y[numero+1] + 1; + Jug -> x[numero] = Jug -> x[numero+1] ; + break; + case 4: + Jug -> x[numero] = Jug -> x[numero+1] - 1; + Jug -> y[numero] = Jug -> y[numero+1] ; + break; + case 6: + Jug -> x[numero] = Jug -> x[numero+1] + 1; + Jug -> y[numero] = Jug -> y[numero+1] ; + break; + } + + // Miramos si esta fuera de los limites para matarlo + if ( Jug -> x[numero] < 10 || Jug -> x[numero] > 625 || Jug -> y[numero] < 135 || Jug -> y[numero] > 274 ) + return 1; + // Miramos si ha chocado con sigo mismo o con el compa¤ero + color = getpixel( Jug -> x[numero], Jug -> y[numero] ); + if ( color == cfgFREC.gOnda || color == cfgFREC.mFondo ) + return 1; + + return 0; +} + +void LimpiaTablero(void) +{ + int yM, xM; + + setfillstyle( SOLID_FILL, EGA_BLACK ); + setcolor( EGA_BLACK ); + bar( 10, 135, 625, 274 ); + + + // Dibujamos matrix, linea del cero + for ( xM = 0; ( xM + inicioMGx ) < ( oAnchoVentana + inicioMGx ); xM += SaltosMatrixX ) + for ( yM = 0; ( yM + inicioMGy ) < ( oAltoVentana + inicioMGy ); yM += SaltosMatrixY ) + putpixel( xM + inicioMGx, yM + inicioMGy, cfgFREC.gMatrix ); + +} + +void AnalizaTeclas( JUGADORES *J1, JUGADORES *J2 ) +{ + // vemos si la tecla del BUFFER es para nosotros + if ( kbhit() ) + switch( getch() ) + { + // Teclas del 1er Jugador + case 'D': + case 'd': + J1 -> direccion = 4; + break; + case 'G': + case 'g': + J1 -> direccion = 6; + break; + case 'R': + case 'r': + J1 -> direccion = 8; + break; + case 'F': + case 'f': + J1 -> direccion = 2; + break; + // Teclas del 2§ Jugador + case 0 : + switch( getch() ) + { + case 75: + J2 -> direccion = 4; + break; + case 77: + J2 -> direccion = 6; + break; + case 72: + J2 -> direccion = 8; + break; + case 80: + J2 -> direccion = 2; + break; + } + } +} diff --git a/FREC/FREC_M.CPP b/FREC/FREC_M.CPP new file mode 100644 index 0000000..6f22308 --- /dev/null +++ b/FREC/FREC_M.CPP @@ -0,0 +1,1161 @@ + /*************************************************************************\ +|* *| +|* Nombre de Fichero: FREC_M .CPP *| +|* *| +|* Nombre de Programa: Generador/Capturador de formas de ondas. *| +|* *| +|* Descripci¢n: *| +|* M¢dulo principal. *| +|* *| +|* Entradas: (ninguna) Creaci¢n: *| +|* Salidas: (ninguna) 25-04-95 20:05 23:30 *| +|* ... ... ... *| +|* 11-05-96 12:30 17:15 *| +|* 12-05-96 18:26 20:05 *| +|* ... ... ... *| +|* 28-05-96 15:50 17:26 *| +|* 29-05-96 15:45 16:30 *| +|* 31-05-96 11:15 13:00 *| +|* 1-06-96 16:00 19:05 *| +|* 2-06-96 18:54 20:20 *| +|* *| + \*************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "..\..\libs\make_bot\make_bot.h" +#include "frec.h" +#include "dibujos.h" +#include "frec_f.h" + +////////////////////////////////////////////////////////////////////////////// +void MenuPupUp( int Px, int Py ); +////////////////////////////////////////////////////////////////////////////// +int Sensibilidad = 0; +/****//****//****//****//****//****//****//****//****//****//****//****/ +typedef struct +{ + int Ex, Ey, Ez; + char Ecolor; +} CAMPO_de_ESTRELLAS; + +char START_3D = ON; + +extern CAMPO_de_ESTRELLAS *Cestrellas, *o; + +extern void deinit_star(void); +extern void init_star(void); +extern void Actualiza(CAMPO_de_ESTRELLAS *Cest); +/****//****//****//****//****//****//****//****//****//****//****//****/ +extern void JuegoTRON(void); + + +char count=0, intvect = OFF; +char CheckBoton_Linkers( int statusBoton, int BPush ); +void SalvarCargar_Onda( char _SalvarCargar ); + +void interrupt handler(__CPPARGS); +void interrupt ( *oldhandler)(__CPPARGS); + +int Espera_TelcaRaton_FREC(void); +int far Select_Mouse_Action(void); +char GeneraOnda(void); +void InitScreen(void); + +char tipoOnda = 0; + +CFG_FREC cfgFREC = { + // N§'s grandes + EGA_RED, + EGA_BLACK, + EGA_DARKGRAY, + // Letras Digitales + EGA_WHITE, + EGA_RED, + // Onda Osciloscopio + EGA_LIGHTGRAY, + EGA_GREEN, + EGA_BLUE, + // Onda Generada + EGA_RED,//LIGHTGRAY, + EGA_GREEN, + // Cuadro MiniOnda + EGA_GREEN, + EGA_BLUE, + EGA_RED + 11, + // Texto + EGA_YELLOW, + EGA_YELLOW, + EGA_RED + }; + + + +int statusBoton=-1; + + p_graphics Numeros = { 15, 15, 6, 3, 3, cfgFREC.nBorde, cfgFREC.nRelleno, cfgFREC.nFondo }; + p_graphics Letras = { 17, 92, 13, 1, 1, cfgFREC.lFondo, cfgFREC.lLetra, 0 }; + +int main(void){ + + char Buffer[80]; + int numero=0, xM; + int BPush; + Dispersion = 5; + + InitScreen(); + + setrgbpalette(EGA_WHITE, 56, 58, 59 ); + setrgbpalette(EGA_LIGHTGRAY, 30, 37, 43 ); + setrgbpalette(EGA_DARKGRAY, 24, 27, 30 ); + + +/****//****//****//****//****//****//****//****//****//****//****//****/ +init_star(); +/****//****//****//****//****//****//****//****//****//****//****//****/ + + + + Numero_Digital( numero, &Numeros ); + + sprintf( Buffer, "1996 (c) JD. " ); + + Fuente_Amplia( Buffer, &Letras ); + +while(1){ // Bucle infinito + BPush = Comprueba_Secuencia( 1, Select_Mouse_Action ); + desactiva_raton(); + // Chequea los linkers a botones de un boton pulsado con linkers + if ( statusBoton != -1 && CheckBoton_Linkers( statusBoton, BPush ) != OK ) + BPush = statusBoton; + switch( BPush ) { // Iniciamos comprobacion + + case 0: // No se pulso ningun BOTON + while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER + // El raton todav¡a sigue pulsado + break; + case -2: + while( kbhit() ) getch(); + // Tecla Normal + case -1: // Hay una tecla especial en BUFFER + // La eliminamos + while( kbhit() ) getch(); + break; + // Boton Selecci¢n GENERADOR/OSCILOSCOPIO + case 1: + SeleccionaControles(); + break; + // Enviar/Recibir onda SI / NO + case 2: + EnviaRecibe(); + break; + case 3: + // Sin uso Actualmente. + break; + case 4: + // Sin uso Actualmente. + break; + case 5: + // Salvar + SalvarCargar_Onda( Salvar ); + break; + case 6: + // Cargar + if ( GenOsc == GENERADOR ) + SalvarCargar_Onda( Cargar ); + break; + case 7: + /* reset the old interrupt handler */ + if ( intvect == ON ) + setvect(INTR, oldhandler); + + free( OndaGenerada ); + free( oOndaGenerada ); + free( cOndaGenerada ); + free( mOndaGenerada ); + + /****//****//****//****//****//****//****//****//****//****//****//****/ + deinit_star(); + /****//****//****//****//****//****//****//****//****//****//****//****/ + + restorecrtmode(); + printf( "\n Bueno, ya habe¡s visto algunas de las posibilidades de este "); + printf( "\n programa. Si de verdad estais interesados en el, esperad a "); + printf( "\n verlo funcionar junto a su Hardward. "); + printf( "\n "); + printf( "\n Para obtener mas informacion sobre el hardware: "); + printf( "\n infomundo@arrakis.es "); + printf( "\n Para obtener informacion del software o su creador: "); + printf( "\n Jose-David.Guillen@cs.us.es "); + printf( "\n guill@cs.us.es "); + printf( "\n infomundo@arrakis.es "); + printf( "\n "); + printf( "\n "); + printf( "\nFuTuRe ViSiOn: Jos‚ David Guill‚n, %s", Buffer ); + + printf( "\nFuTuRe ViSiOn: Jos‚ David Guill‚n, %s", Buffer ); + + return 0; + case 8: + // Ayuda on-line + break; + case 9: + // Creditos + break; + case 10: + // Sin uso Actualmente + break; + case 11: + // Cuadro Amplitud + break; + case 12: + // Cuadro unidades Amplitud + break; + case 13: + // Cuadro Periodo + break; + case 14: + // Cuadro unidades Periodo + break; + case 15: + // Sin uso Actualmente + // Bloque de cursores 9 + break; + case 16: + // Bloque de cursores Flecha derecha + switch( statusBoton ) + { + case 25: + // Crea Tipo de Onda + ReajustaTipoOnda( DERECHA ); + break; + case 17: + // MRK + DesplazaMarca( IncrementoMarca, INICIO ); + break; + default: + DesplazaOnda( DERECHA ); + break; + } + break; + case 17: + // Bloque de cursores Marcar parte de la onda + // Marca o desmarca la parte de onda seleccionada + Dibuja_OndaSeleccionada(PINTA); + if ( statusBoton == BPush ) + { + ponicono( 623, 100, led_off, 1 ); + statusBoton = -1; + } else { + statusBoton = BPush; + ponicono( 623, 100, led_on, 1 ); + Numero_Digital( -1*OndaGenerada[x_raton+5 * Desplazamiento], &Numeros ); + } + break; + case 18: + // Bloque de cursores Flecha Arriba + switch( statusBoton ) + { + case 25: + // Crea Tipo de Onda + ReajustaTipoOnda( ARRIBA ); + break; + case 23: + // Tierra + ReajusteTierra( ARRIBA ); + break; + case 17: + DesplazaMarca( -1*IncrementoMarca, FIN ); + break; + default: + DesplazaOnda( ARRIBA ); + break; + } + break; + case 19: + // Bloque de cursores Centrar Cero + switch( statusBoton ) + { + case 17: + DesplazaMarca( 0, TODO ); + break; + default: + DesplazaOnda( CENTRAR ); + break; + } + break; + case 20: + // Bloque de cursores Flecha Abajo + switch( statusBoton ) + { + case 25: + // Crea Tipo de Onda + ReajustaTipoOnda( ABAJO ); + break; + case 23: + // Tierra + ReajusteTierra( ABAJO ); + break; + case 17: + DesplazaMarca( IncrementoMarca, FIN ); + break; + default: + DesplazaOnda( ABAJO ); + break; + } + break; + case 21: + // Sin uso Actualmente + // Bloque de cursores 7 + JuegoTRON(); + break; + case 22: + // Bloque de cursores Flecha izquierda + switch( statusBoton ) + { + case 25: + // Crea Tipo de Onda + ReajustaTipoOnda( IZQUIERDA ); + break; + case 17: + // MRK + DesplazaMarca( -1*IncrementoMarca, INICIO ); + break; + default: + DesplazaOnda( IZQUIERDA ); + break; + } + break; + case 23: + // Bloque de cursores Tierra ( ajuste ) + if ( statusBoton == BPush ) + { + ponicono( 572, 100, led_off, 1 ); + statusBoton = -1; + } else { + statusBoton = BPush; + ponicono( 572, 100, led_on, 1 ); + } + break; + case 24: + // Selecciona toda la onda + break; + case 25: + // Estancar proceso de crear tipo de onda + if ( statusBoton == BPush ) + { + // Apagamos la luz de marcar onda + ponicono( 623, 100, led_off, 1 ); + // Led Off ( para anclar onda ) + ponicono( 369, 7, led_off, 1 ); + statusBoton = -1; + Tonda = -1; + Redibuja_MiniOnda(); + } else { + Dibuja_OndaSeleccionada(PINTA); + statusBoton = BPush; + ponicono( 369, 7, led_on, 1 ); + } + break; + case 26: + // Retroceder tipo de onda + tipoOnda --; + if ( tipoOnda < 0 ) + tipoOnda = 0; + setwritemode( COPY_PUT ); + setfillstyle( SOLID_FILL, EGA_LIGHTGRAY ); + bar( 427, 3, 450, 21 ); + bar( 456, 3, 479, 21 ); + bar( 485, 3, 508, 21 ); + ponicono( 430, 3, TipoOnda[ tipoOnda ], 1 ); + ponicono( 459, 3, TipoOnda[ tipoOnda + 1 ], 1 ); + ponicono( 488, 3, TipoOnda[ tipoOnda + 2 ], 1 ); + break; + case 27: + case 28: + case 29: + if ( statusBoton == 25 ) + { + // Genera onda + Tonda = (BPush-27)+tipoOnda+1; + // Crea Tipo de Onda + ReajustaTipoOnda( CENTRAR ); + } + break; + case 30: + // Avanzar tipo de onda + tipoOnda ++; + if ( tipoOnda > 7 ) + tipoOnda = 7; + setwritemode( COPY_PUT ); + setfillstyle( SOLID_FILL, EGA_LIGHTGRAY ); + bar( 427, 3, 450, 21 ); + bar( 456, 3, 479, 21 ); + bar( 485, 3, 508, 21 ); + ponicono( 430, 3, TipoOnda[ tipoOnda ], 1 ); + ponicono( 459, 3, TipoOnda[ tipoOnda + 1 ], 1 ); + ponicono( 488, 3, TipoOnda[ tipoOnda + 2 ], 1 ); + break; + case 31: + // Sin uso Actualmente + break; + case 32: + // Sin uso Actualmente + break; + case 33: + // Sin uso Actualmente + break; + default: + while( kbhit() ) getch(); + break; + } + activa_raton(); +} + +} + +/***************************************************************************\ +|* *| +|* InitScreen *| +|* *| +|* Descripci¢n: *| +|* Inicializa la pantalla y el entorno completo *| +|* *| +|* Entradas: (ninguna) *| +|* *| +|* *| +|* *| +|* Salidas: (ninguna) *| +|* *| +\***************************************************************************/ +void InitScreen(void) + { + Initialize( 9, 2 ); // Inicializa el Modo Gr fico + + Imprime_Estaticos( 1, "Frec.img"); // Imprime botones estaticos 'Seccion 1' + + if ( carga_botones( "Frec.img" ) != 0 ) + exit ( 1 ); + + Imprime_Secuencia( 1 ); + + Imprime_Estaticos( 2, "Frec.img"); // Imprime botones estaticos 'Seccion 1' + + // Cursores << /\ \/ >> + ponicono( 593, 51, flecha, 4 ); + ponicono( 569, 75, flecha, 1 ); ponicono( 620, 75, flecha, 3 ); + ponicono( 593, 100, flecha, 2 ); + // Cursores tipo de onda << >> + ponicono( 401, 3, flecha, 1 ); ponicono( 517, 3, flecha, 3 ); + // Flecha funcionar GENERADOR / OSCILOSCOPIO + ponicono( 319, 3, flecha, 3 ); + // Dibujo cargar + ponicono( 245, 52, cargar, 1 ); + // Dibujo salvar + ponicono( 245, 76, salvar, 1 ); + // Dibujo salir + ponicono( 245, 99, salir, 1 ); + // Led Off ( no enviar onda ) + ponicono( 245, 7, led_off, 1 ); + // Led Off ( para anclar onda ) + ponicono( 369, 7, led_off, 1 ); + // Led Off ( para marcar la onda ) + ponicono( 623, 100, led_off, 1 ); + // Led Off ( para colocar la linea del cero ) + ponicono( 572, 100, led_off, 1 ); + // Ayuda on-Line + ponicono( 345, 6, help, 1 ); + // Creditos + ponicono( 345, 37, CREDITS, 1 ); + // Iconos con los tipos de ondas + ponicono( 430, 3, TipoOnda[ tipoOnda ], 1 ); + ponicono( 459, 3, TipoOnda[ tipoOnda + 1 ], 1 ); + ponicono( 488, 3, TipoOnda[ tipoOnda + 2 ], 1 ); + + + // Inicializamos la GranOnda y la MiniOnda + if ( GeneraOnda() != OK ) + { + restorecrtmode(); + printf("\n Memoria insuficiente para la representaci¢n lineal de la onda\n"); + exit(-1); + } + + True_Push = ON; + PunteroRaton = 1; + inicializa_raton_grafico( 0, 0, alcanceRatonX, alcanceRatonY ); + + /* save the old interrupt vector */ + oldhandler = getvect(INTR); + /* install the new interrupt handler */ + + intvect = ON; + setvect(INTR, handler); + + + } + +/***************************************************************************\ +|* *| +|* GeneraOnda *| +|* *| +|* Descripci¢n: *| +|* Inicializa la memoria y dibuja una onda por defecto *| +|* *| +|* Entradas: (ninguna) *| +|* *| +|* *| +|* *| +|* Salidas: Estado de la inicializaci¢n *| +|* *| +\***************************************************************************/ +char GeneraOnda(void) +{ + int xM, yM; + + // Pedimos memoria e inicializamos la onda a una onda nula. + if ( ( OndaGenerada = (int *)calloc( oAnchoVentana * oVentanas + 20, sizeof(int) ) ) == NULL ) + return ERROR; + // Memoria para el contenido anterior a los puntos de la GRANDEo + if ( ( oOndaGenerada = (int *)calloc( oAnchoVentana + 20, sizeof(int ) ) ) == NULL ) + return ERROR; + if ( ( cOndaGenerada = (char*)calloc( oAnchoVentana + 20, sizeof(char) ) ) == NULL ) + return ERROR; + if ( ( mOndaGenerada = (int *)calloc( oAnchoVentana + 20, sizeof(int ) ) ) == NULL ) + return ERROR; + + + for ( int x = 0; x <= (oAnchoVentana * oVentanas) / 3; x++ ) + OndaGenerada[ x ] = (int)(sin( x * 0.05 ) * 50); + int a, i=1; + + a = OndaGenerada[ x-1 ]; + for ( x; x <= ((oAnchoVentana * oVentanas) / 3)*2; x++ ) + { + if ( a == 50 ) i = 1; + if ( a == -50 ) i = 0; + if ( i == 0 ) a ++; else a--; + OndaGenerada[ x ] = a; + } + for ( x; x < (oAnchoVentana * oVentanas) ; x++ ) + OndaGenerada[ x ] = (int)(sin( (x+23) * 0.07) * 60); + + // Dibujamos matrix, linea del cero y Gran Onda + for ( xM = 0; ( xM + inicioMGx ) < ( oAnchoVentana + inicioMGx ); xM += SaltosMatrixX ) + for ( yM = 0; ( yM + inicioMGy ) < ( oAltoVentana + inicioMGy ); yM += SaltosMatrixY ) + putpixel( xM + inicioMGx, yM + inicioMGy, cfgFREC.gMatrix ); + // Linea del cero + setcolor( cfgFREC.gMatrix ); + setwritemode( XOR_PUT ); + line( inicioMGx, inicioMGy+ceroOGenerada, inicioMGx + oAnchoVentana, inicioMGy + ceroOGenerada ); + setwritemode( COPY_PUT ); + DibujaOnda(oDesde + 5 * Desplazamiento, oHasta + 5 * Desplazamiento, oAnchoVentana, oAltoVentana, GRANDEo ); + + + // Fondo y MiniOnda + setfillstyle( SOLID_FILL, cfgFREC.mFondo ); + bar( 8, inicioMmGy, 633, inicioMmGy + mAltoCuadro ); + DibujaOnda( 0, oFinalOnda, oAnchoVentana, mAltoCuadro, MINIo ); + // Cuadro onda visible + setcolor( cfgFREC.mMarco ); + setwritemode( XOR_PUT ); + rectangle( 8, inicioMmGy, 8 + mAnchoMarco, inicioMmGy + mAltoCuadro ); + setwritemode( COPY_PUT ); + + + return OK; +} + + + +/***************************************************************************\ +|* *| +|* Select_Mouse_Action *| +|* *| +|* Descripci¢n: *| +|* Control interactivo del raton. *| +|* *| +|* Entradas: (ninguna) *| +|* *| +|* *| +|* *| +|* Salidas: (ninguna) *| +|* *| +\***************************************************************************/ +int far Select_Mouse_Action(void) +{ + int ox_raton = -1, oy_raton = -1; + + activa_raton(); + + union REGS io; + io.x.ax = 3; + + do{ + int86(0x33, &io, &io); // lee posici¢n y estados del bot¢n + + x_raton = io.x.cx; + y_raton = io.x.dx; +/***************************************************************************/ +if ( START_3D == ON ) + Actualiza(Cestrellas); +/***************************************************************************/ +// boton_izq = io.x.bx & 1; +// boton_der = (io.x.bx >> 1) & 1; + + + + + if ( y_raton >= (inicioMGy + oAltoVentana + factorCorreccionRatonY) ) + { + if ( y_raton >= inicioMmGy && x_raton >= ( 8 + Desplazamiento) && x_raton <= (8 + mAnchoMarco + Desplazamiento) ) + { + if ( PunteroRaton != 3 ) + { + PunteroRaton = 3; + Carga_Puntero (); + } + } else { + if ( PunteroRaton != 1 ) + { + PunteroRaton = 1; + Carga_Puntero (); + } + } + } else + + if ( PunteroRaton != 2 && y_raton >= ( inicioMGy - 8 ) && y_raton < ( inicioMGy + oAltoVentana + factorCorreccionRatonY ) ) + { + PunteroRaton = 2; + Carga_Puntero (); + } else + if ( PunteroRaton != 1 && y_raton < ( inicioMGy - 8 ) ) + { + PunteroRaton = 1; + Carga_Puntero (); + } + + // BARRA DE LA ONDA REDUCIDA + if ( y_raton >= (inicioMGy + oAltoVentana + factorCorreccionRatonY) && + x_raton >= (8 + Desplazamiento) && x_raton <= (8 + mAnchoMarco + Desplazamiento) + ) + if ( (io.x.bx & 1) ) + { + + // Desplazamiento normal del cuadro actual ( tama¤o actual tambien ) + ox_raton = x_raton; + setwritemode( XOR_PUT ); + setcolor( cfgFREC.mMarco ); + + do { + int86(0x33, &io, &io); // lee posici¢n y estados del bot¢n + + x_raton = io.x.cx; + y_raton = io.x.dx; + if ( ox_raton != x_raton && ( mAnchoMarco + Desplazamiento ) <= oAnchoVentana && Desplazamiento >= 0 ) + { + desactiva_raton(); + // Limpiamos la zona antigua + rectangle( 8 + Desplazamiento, inicioMmGy, 8 + mAnchoMarco + Desplazamiento, inicioMmGy + mAltoCuadro ); + + Desplazamiento+= x_raton - ox_raton; + + if ( Desplazamiento < 0 ) Desplazamiento = 0; else + if ( ( mAnchoMarco + Desplazamiento ) > oAnchoVentana ) + Desplazamiento = oAnchoVentana - mAnchoMarco; + + rectangle( 8 + Desplazamiento, inicioMmGy, 8 + mAnchoMarco + Desplazamiento, inicioMmGy + mAltoCuadro ); + + activa_raton(); + } + ox_raton = x_raton; + +/***************************************************************************/ +if ( START_3D == ON ) + Actualiza(Cestrellas); +/***************************************************************************/ + } while( (io.x.bx & 1) || ((io.x.bx >> 1) & 1) ); + + desactiva_raton(); + setwritemode( COPY_PUT ); + // Tras desplazar redibujamos la onda + DibujaOnda(oDesde + 5 * Desplazamiento, oHasta + 5 * Desplazamiento, oAnchoVentana, oAltoVentana, GRANDEo ); + + activa_raton(); + + } else if ( ((io.x.bx >> 1) & 1) ) + { + // Selecci¢n de la posicion y tama¤o del cuadro + + } + + if ( y_raton >= inicioMGy && y_raton <= (inicioMGy + oAltoVentana) && + x_raton >= 0 && x_raton <= (inicioMGx + oAnchoVentana) ) + { + if ( (io.x.bx & 1) || ((io.x.bx >> 1) & 1) ) + { + if ( statusBoton == 17 ) + { + desactiva_raton(); + + if (io.x.bx & 1) + { + MRK_begin = x_raton*((float)( oHasta - oDesde ) / (float)oAnchoVentana) + 5 * Desplazamiento; + while ( MRK_begin > MRK_end ) MRK_begin--; + } else { + MRK_end = x_raton*((float)( oHasta - oDesde ) / (float)oAnchoVentana) + 5 * Desplazamiento; + while ( MRK_end < MRK_begin ) MRK_end++; + } + Dibuja_OndaSeleccionada( !PINTA ); + Numero_Digital( -1*OndaGenerada[(int)(x_raton*((float)( oHasta - oDesde ) / (float)oAnchoVentana) + 5 * Desplazamiento)], &Numeros ); + activa_raton(); + Anclar_Raton(); + } else { + + if ( ((io.x.bx >> 1) & 1) ) + { + Anclar_Raton(); + desactiva_raton(); + MenuPupUp( x_raton , y_raton ); + activa_raton(); + } else { + + // Retoque manual de la onda + proceso de perfilado autom tico + desactiva_raton(); + do{ + if ( oy_raton != y_raton || ox_raton != x_raton ) + if ( y_raton >= inicioMGy && y_raton <= (inicioMGy + oAltoVentana) && + x_raton >= 0 && x_raton <= (inicioMGx + oAnchoVentana) ) + { + + oy_raton = y_raton; ox_raton = x_raton; + + Retoca_Punto( x_raton*((float)( oHasta - oDesde ) / (float)oAnchoVentana) + 5 * Desplazamiento, + (y_raton - inicioMGy - ceroOGenerada)/*ReduccionY*/ ); + } else break; + int86(0x33, &io, &io); // lee posici¢n y estados del bot¢n + x_raton = io.x.cx; + y_raton = io.x.dx; + +/***************************************************************************/ +if ( START_3D == ON ) + Actualiza(Cestrellas); +/***************************************************************************/ + }while( (io.x.bx & 1) || ((io.x.bx >> 1) & 1)); + Redibuja_MiniOnda(); + activa_raton(); + + } + + + } + + int86(0x33, &io, &io); // lee posici¢n y estados del bot¢n + + } + } + + }while( (io.x.bx & 1) == 0 && ((io.x.bx >> 1) & 1) == 0 && !kbhit()/*!MB_TeclaPulsada()*/ ); + + + ///////////////////////////////////////// + // RETURN Derecho Izquierdo // + // // + // 0 0 0 // + // 1 1 0 // + // 2 0 1 // + // 3 1 1 // + // // + ///////////////////////////////////////// + + desactiva_raton(); + + if ( ((io.x.bx >> 1) & 1)==0 && (io.x.bx & 1)==0 ) return 0; + if ( ((io.x.bx >> 1) & 1)==1 && (io.x.bx & 1)==0 ) return 1; + if ( ((io.x.bx >> 1) & 1)==0 && (io.x.bx & 1)==1 ) return 2; + if ( ((io.x.bx >> 1) & 1)==1 && (io.x.bx & 1)==1 ) return 3; + + return 0; +} + + + +/***************************************************************************\ +|* *| +|* INT CLK *| +|* *| +|* Descripci¢n: *| +|* interrupci¢n para el parpadeo de los led's *| +|* *| +|* Entradas: (indeterminadas) *| +|* *| +|* *| +|* *| +|* Salidas: (ninguna) *| +|* *| +\***************************************************************************/ +void interrupt handler(__CPPARGS) +{ +/* increase the global counter */ + count = (count++)%16; + if ( count == 1 ) + { + setpalette( 11, EGA_GREEN ); + setpalette( 13, EGA_LIGHTGREEN ); + } + else if ( count == 8 ) + { + setpalette( 11, EGA_RED ); + setpalette( 13, EGA_LIGHTRED ); + + } + +/* call the old routine */ + oldhandler(); +} + +/***************************************************************************\ +|* *| +|* SalvarCargar_Onda *| +|* *| +|* Descripci¢n: *| +|* Salva o carga una forma de onda. *| +|* *| +|* Entradas: *| +|* Salvar/Cargar *| +|* *| +|* *| +|* Salidas: (ninguna) *| +|* *| +\***************************************************************************/ +void SalvarCargar_Onda( char _SalvarCargar ) +{ + char Buffer[500] = "*.OND"; + char Buffer2[13]; + + union REGS ent, sal; + ent.x.ax = 8; ent.x.cx = 0; ent.x.dx = 480; + int86(0x33, &ent, &sal); /* fija la posici¢n m x. y m¡n. vertical */ + activa_raton(); + + +if ( _SalvarCargar == Salvar ) +{ + if ( file_browser( Buffer, "Salvar Forma de Onda", 1 ) ) + { + + char drive[MAXDRIVE]; + char dir[MAXDIR]; + char file[MAXFILE]; + char ext[MAXEXT]; + int flags; + + flags=fnsplit(Buffer,drive,dir,file,ext); + if( !(flags & EXTENSION) ) + strcpy( ext, ".OND" ); + fnmerge(Buffer ,drive,dir,file,ext); + + + // Buffer contiene el path completo para el archivo a salvar. + } +} else { + + if ( file_browser( Buffer, "Cargar Forma de Onda", 0 ) ) { + + // Buffer contiene el path completo para el archivo a cargar... + while( kbhit() ) getch(); + // A cargar la onda + } + +} + + ent.x.ax = 8; ent.x.cx = 0; ent.x.dx = alcanceRatonY; + int86(0x33, &ent, &sal); /* fija la posici¢n m x. y m¡n. vertical */ + +} + + +/***************************************************************************\ +|* *| +|* CheckBoton_Linkers *| +|* *| +|* Descripci¢n: *| +|* Chequea que el boton pulsado, tiene un LINK con el activo *| +|* *| +|* Entradas: *| +|* Boton activo *| +|* Boton pulsado *| +|* *| +|* Salidas: *| +|* OK Linker definido correctamente *| +|* ERROR *| +|* *| +\***************************************************************************/ +char CheckBoton_Linkers( int statusBoton, int BPush ) +{ + switch( BPush ) { // Iniciamos comprobacion + + case 0: + case -2: + case -1: + return OK; + break; + // Boton Selecci¢n GENERADOR/OSCILOSCOPIO + case 1: + break; + case 2: + // Enviar/Recibir onda SI / NO + break; + case 3: + // Sin uso Actualmente. + break; + case 4: + // Sin uso Actualmente. + break; + case 5: + // Salvar + break; + case 6: + // Cargar + break; + case 8: + // Ayuda on-line + break; + case 9: + // Creditos + break; + case 10: + // Sin uso Actualmente + break; + case 11: + // Cuadro Amplitud + break; + case 12: + // Cuadro unidades Amplitud + break; + case 13: + // Cuadro Periodo + break; + case 14: + // Cuadro unidades Periodo + break; + case 15: + // Sin uso Actualmente + // Bloque de cursores 9 + break; + + case 20: + // Bloque de cursores Centrar Cero + case 18: + case 19: + case 22: + case 16: + // Bloque de cursores Flecha Arriba + // Bloque de cursores Flecha Abajo + // Bloque de cursores Flecha izquierda + // Bloque de cursores Flecha derecha + if ( statusBoton == 23/*GND*/ ) return OK; + if ( statusBoton == 17/*MRK*/ ) return OK; + if ( statusBoton == 25/*CPY*/ ) return OK; + break; + + case 17: + // Bloque de cursores Marcar parte de la onda + break; + case 21: + // Sin uso Actualmente + // Bloque de cursores 7 + break; + case 23: + // Bloque de cursores Tierra ( ajuste ) + break; + case 24: + // Selecciona toda la onda + break; + case 25: + // Estancar proceso de copiar tipo de onda + if ( statusBoton == 17/*MRK*/ ) return OK; + break; + case 26: + case 30: + // Avanzar tipo de onda + // Retroceder tipo de onda + case 27: + case 28: + case 29: + // Genera onda + if ( statusBoton == 25/*CPY*/ ) return OK; + break; + case 31: + // Sin uso Actualmente + break; + case 32: + // Sin uso Actualmente + break; + case 33: + // Sin uso Actualmente + break; + default: + return ERROR; + } + return ERROR; +} + + + + +// M_PI_2 M_PI_2 +// ___³___ _____ +// / ³ \ / \ +// / ³ \ / \ +// _______|_______³_______|______0____|_____________|____________________ +// PI | ³ | 2*PI | PI | 2*PI +// \ ³ / \ / +// \ ___³___ / \ _____ / +// ³ 3*M_PI_4 +// 3 * M_PI_4 +// * * +// +// * * +// . . . . +// . . * . . * +// . . . . +// -----------.-------------.-------------.------------.----------------- +// . . . . +// . . . . . +// . . . . +// +// + + + + +void MenuPupUp( int Px, int Py ) +{ + #define DISPERCION 1 + #define SENSIBILIDAD 0 + char Buffer[80]; + void far *Fondo; + int i, end = OFF; int SeCa; + char DispSenc = DISPERCION; + extern int *n_Botones_Secuencia; + + struct Make_Boton // + { // Estas variables son externas + int Up, Left, Down, Right; // + unsigned char Cdf, Cb1, Cb2; // a todo el programa, y no + unsigned char Ab, Pb; // + unsigned char Isc, Sc; // deberian ser visibles ni a + }; // + // esta funci¢n... + extern struct Make_Boton far *Botones; // + + // Corregimos el factor de posici¢n + while( Px+135 > 639 ) Px --; + while( Py+52 > inicioMmGy ) Py --; + + // 1§ asignamos memoria y guardamos el contenido de la pantalla a superponer + if ( ( Fondo = (void far *)farmalloc( imagesize(0, 0, 135, 52) ) ) == NULL ) return; + getimage( 0+Px, 0+Py, 135+Px, 52+Py, Fondo ); + + // Re-posiciono los botones din micos a las nuevas posiciones + // todos se encuentran en D5. ==>> Sec_n = 5 - 1 = 4. + SeCa = n_Botones_Secuencia[0] + n_Botones_Secuencia[1] + n_Botones_Secuencia[2] + n_Botones_Secuencia[3]; + for ( i = 0; i < n_Botones_Secuencia[4]; i++ ) + { + Botones[SeCa+i].Left += Px; Botones[SeCa+i].Up += Py; + Botones[SeCa+i].Right += Px; Botones[SeCa+i].Down += Py; + } + // Dibujamos el men£ + Imprime_Secuencia( 5 ); + // Dibujamos las Led's y las flechas. + // LED Dispersi¢n/Sensibilidad + ponicono( 36+Px, 7+Py, led_on, 1 ); + ponicono( 36+Px, 36+Py, led_off, 1 ); + // Flechas +- Dispersi¢n/Sensibilidad + ponicono( 114+Px, 3+Py, flecha, 4 ); + ponicono( 114+Px, 32+Py, flecha, 2 ); + + setfillstyle( SOLID_FILL, EGA_BLACK ); + settextstyle( SMALL_FONT, HORIZ_DIR, 4 ); + setcolor( cfgFREC.Texto ); + // Comenzamos el Chequeo del nuevo men£ +do{ + + bar( 52+Px, 5+Py, 101+Px, 19+Py ); + bar( 52+Px, 34+Py, 101+Px, 47+Py ); + setcolor( cfgFREC.Texto ); + sprintf( Buffer, "%8d", Dispersion ); + outtextxy( 52+Px, 5+Py, Buffer ); + sprintf( Buffer, "%8d", Sensibilidad ); + outtextxy( 52+Px, 34+Py, Buffer ); + + + switch( Comprueba_Secuencia( 5, NULL ) ) + { + case 0: // No se pulso ningun BOTON + while( kbhit() ) getch(); // Limpiamos posibles teclas en BUFFER + // El raton todav¡a sigue pulsado + break; + case -2: + while( kbhit() ) getch(); + break; + // Tecla Normal + case -1: // Hay una tecla especial en BUFFER + // La eliminamos + while( kbhit() ) getch(); + break; + case 1: + end = ON; + break; + case 2: + case 3: + DispSenc = DISPERCION; + ponicono( 36+Px, 7+Py, led_on, 1 ); + ponicono( 36+Px, 36+Py, led_off, 1 ); + break; + case 4: + case 5: + DispSenc = SENSIBILIDAD; + ponicono( 36+Px, 7+Py, led_off, 1 ); + ponicono( 36+Px, 36+Py, led_on, 1 ); + break; + case 6: + if ( DispSenc == SENSIBILIDAD ) + Sensibilidad++; + else + Dispersion++; + break; + case 7: + if ( DispSenc == SENSIBILIDAD ) + { + Sensibilidad--; if ( Sensibilidad < 0 ) Sensibilidad = 0; + } else { + Dispersion--; if ( Dispersion < 1 ) Dispersion = 1; + } + break; + } + +}while( end == OFF ); + + // Restauramos los valores por defecto del menu PopUp + for ( i = 0; i < n_Botones_Secuencia[4]; i++ ) + { + Botones[SeCa+i].Left -= Px; Botones[SeCa+i].Up -= Py; + Botones[SeCa+i].Right -= Px; Botones[SeCa+i].Down -= Py; + } + // Restauramos el contenido anterior + putimage( 0+Px, 0+Py, Fondo, COPY_PUT ); + // Liberamos la memoria requerida anteriormente + farfree( Fondo ); +} + + diff --git a/FREC/LITT.CHR b/FREC/LITT.CHR new file mode 100644 index 0000000..08c3067 Binary files /dev/null and b/FREC/LITT.CHR differ diff --git a/FREC/NUMERO.CPP b/FREC/NUMERO.CPP new file mode 100644 index 0000000..154475a --- /dev/null +++ b/FREC/NUMERO.CPP @@ -0,0 +1,2141 @@ +#include +#include +#include +#include +/////////////////////////////////// +#include +/////////////////////////////////// +#include + +// #define 0± e +// #define ÿ 0 +// ^ Caracter 255 + int TabS[255]; + + +typedef struct + { + int x, y; + char ndigitos; + char AX, AY; + char C1, C2, C3; + } p_graphics; + +int Numero_Digital( long numero, p_graphics *ND ); +void Fuente_Amplia( char *Frase, p_graphics *FA ); +void Fuente_Amplia2( char *Frase, p_graphics *FA ); + +int Numero_Digital( long numero, p_graphics *ND ) +{ +// Son 9 digitos VARIABLES +// 0 +// _________ _________ _________ _________ _________ _________ _________ +// |\______ /| |\______ /| |\______ /| |\______ /| |\______ /| |\______ /| |\______ /| +// | | | | | | | | | | | | | | | | | | | | | | | | | | | | +//3 | | 1 | | 5 | | | | | | | | | | | | | | | | | | | | | | | | +// | /-----\ | | /-----\ | | /-----\ | | /-----\ | | /-----\ | | /-----\ | | /-----\ | +// | \-----/ | | \-----/ | | \-----/ | | \-----/ | | \-----/ | | \-----/ | | \-----/ | +//4 | | | | 6 | | | | | | | | | | | | | | | | | | | | | | | | +// | |_____| | | |_____| | | |_____| | | |_____| | | |_____| | | |_____| | | |_____| | +// |/_______\| |/_______\| |/_______\| |/_______\| |/_______\| |/_______\| |/_______\| +// 2 + + static char dnumero[9] = { -1, -1, -1, -1, -1, -1, -1, -1, -1 }; + static char Dn[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + //static ndigitos1 = -1; + static char vez = 0; + static p_graphics ND1; + + if ( + ND1.x != ND -> x || ND1.y != ND -> y || + ND1.ndigitos != ND -> ndigitos || + ND1.AX != ND -> AX || ND1.AY != ND -> AY + /*ndigitos1 != ndigitos*/ + ) { dnumero[0] = -1; dnumero[1] = -1; dnumero[2] = -1; + dnumero[3] = -1; dnumero[4] = -1; dnumero[5] = -1; + dnumero[6] = -1; dnumero[7] = -1; dnumero[8] = -1; + Dn[0] = 0; Dn[1] = 0; Dn[2] = 0; + Dn[3] = 0; Dn[4] = 0; Dn[5] = 0; + Dn[6] = 0; Dn[7] = 0; Dn[8] = 0; + //ndigitos1 = ndigitos; + ND1 = *ND; + vez = 0; + } + // { 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F }; + + char dnum=0, i, j, digital; + int punto[10]; + int CONST = 0; + char DnTmp[2]; + char signo = 0; + static old_signo = 0; +// ndigitos - 1 +// if ( numero > 999999 || numero < -99999 ) return -1; +// 1000000 + + + if ( numero < 0 ) { numero *= -1; + signo = 1; + } + if ( signo != old_signo ) vez = 0; + + setcolor(ND -> C3); + +// char old_dnum; + + for( i=0; i < ND -> ndigitos; i++ ) + { + // old_dnum = dnum; + dnum = numero % 10; + digital = numero; + numero /= 10; + + if ( dnumero[ ND -> ndigitos - 1 - i] != dnum || digital == 0 || vez == 0 ) + { + // digital = dnumero[5 - i]; + dnumero[ND -> ndigitos - 1 - i] = dnum; + //////// Esta parte del c¢digo imprime el digito en pantalla + CONST = 12*ND -> AX*(ND -> ndigitos - 1 - i); + DnTmp[1] = Dn[ND -> ndigitos - 1 -i]; +// if ( i == 5 && signo == 1 ) Dn[5-i] = 2; else + // Antes de nada, eliminamos los cero a la izquierda + if ( digital == 0 && i != 0 ) { Dn[ND -> ndigitos - 1 -i] = 0; dnumero[ND -> ndigitos - 1 - i] = -1; } else + switch( dnum ) + { + case 0: + Dn[ND -> ndigitos - 1 -i] = 0x7D; // 0111 1101 + break; + case 1: + Dn[ND -> ndigitos - 1 -i] = 0x60; // 0110 0000 + break; + case 2: + Dn[ND -> ndigitos - 1 -i] = 0x37; // 0011 0111 + break; + case 3: + Dn[ND -> ndigitos - 1 -i] = 0x67; // 0110 0111 + break; + case 4: + Dn[ND -> ndigitos - 1 -i] = 0x6A; // 0110 1010 + break; + case 5: + Dn[ND -> ndigitos - 1 -i] = 0x4F; // 0100 1111 + break; + case 6: + Dn[ND -> ndigitos - 1 -i] = 0x5F; // 0101 1111 + break; + case 7: + Dn[ND -> ndigitos - 1 -i] = 0x61; // 0110 0001 + break; + case 8: + Dn[ND -> ndigitos - 1 -i] = 0x7F; // 0111 1111 + break; + case 9: + Dn[ND -> ndigitos - 1 -i] = 0x6F; // 0110 1111 + break; + } + + DnTmp[0] = Dn[ND -> ndigitos - 1 -i]; + for( j=0; j<7; j++ ) + { + if ( DnTmp[1]%2 != DnTmp[0]%2 || vez == 0 ) + { + if ( DnTmp[0]%2 ) + setfillstyle(SOLID_FILL, ND -> C1); + else + setfillstyle(SOLID_FILL, ND -> C2); + + switch( j ) + { + case 0: + punto[0] = 0*ND -> AX + CONST + ND -> x; punto[1] = 0*ND -> AY + ND -> y; + punto[2] = 10*ND -> AX + CONST + ND -> x; punto[3] = 0*ND -> AY + ND -> y; + punto[4] = 8*ND -> AX + CONST + ND -> x; punto[5] = 2*ND -> AY + ND -> y; + punto[6] = 2*ND -> AX + CONST + ND -> x; punto[7] = 2*ND -> AY + ND -> y; + punto[8] = 0*ND -> AX + CONST + ND -> x; punto[9] = 0*ND -> AY + ND -> y; + fillpoly( 5, punto ); + break; + case 3: + punto[0] = 0*ND -> AX + CONST + ND -> x; punto[1] = 0*ND -> AY + ND -> y; + punto[2] = 2*ND -> AX + CONST + ND -> x; punto[3] = 2*ND -> AY + ND -> y; + punto[4] = 2*ND -> AX + CONST + ND -> x; punto[5] = 9*ND -> AY + ND -> y; + punto[6] = 1*ND -> AX + CONST + ND -> x; punto[7] = 10*ND -> AY + ND -> y; + punto[8] = 0*ND -> AX + CONST + ND -> x; punto[9] = 9*ND -> AY + ND -> y; + fillpoly( 5, punto ); + break; + case 5: + punto[0] = 10*ND -> AX + CONST + ND -> x; punto[1] = 0*ND -> AY + ND -> y; + punto[2] = 10*ND -> AX + CONST + ND -> x; punto[3] = 9*ND -> AY + ND -> y; + punto[4] = 9*ND -> AX + CONST + ND -> x; punto[5] = 10*ND -> AY + ND -> y; + punto[6] = 8*ND -> AX + CONST + ND -> x; punto[7] = 9*ND -> AY + ND -> y; + punto[8] = 8*ND -> AX + CONST + ND -> x; punto[9] = 2*ND -> AY + ND -> y; + fillpoly( 5, punto ); + break; + case 1: + int punto1[12]; + punto1[0] = 1*ND -> AX + CONST + ND -> x; punto1[1] = 10*ND -> AY + ND -> y; + punto1[2] = 2*ND -> AX + CONST + ND -> x; punto1[3] = 9*ND -> AY + ND -> y; + punto1[4] = 8*ND -> AX + CONST + ND -> x; punto1[5] = 9*ND -> AY + ND -> y; + punto1[6] = 9*ND -> AX + CONST + ND -> x; punto1[7] = 10*ND -> AY + ND -> y; + punto1[8] = 8*ND -> AX + CONST + ND -> x; punto1[9] = 11*ND -> AY + ND -> y; + punto1[10] = 2*ND -> AX + CONST + ND -> x; punto1[11] = 11*ND -> AY +ND -> y; + fillpoly( 6, punto1 ); + break; + case 4: + punto[0] = 1*ND -> AX + CONST + ND -> x; punto[1] = 10*ND -> AY + ND -> y; + punto[2] = 2*ND -> AX + CONST + ND -> x; punto[3] = 11*ND -> AY + ND -> y; + punto[4] = 2*ND -> AX + CONST + ND -> x; punto[5] = 18*ND -> AY + ND -> y; + punto[6] = 0*ND -> AX + CONST + ND -> x; punto[7] = 20*ND -> AY + ND -> y; + punto[8] = 0*ND -> AX + CONST + ND -> x; punto[9] = 11*ND -> AY + ND -> y; + fillpoly( 5, punto ); + break; + case 6: + punto[0] = 9*ND -> AX + CONST + ND -> x; punto[1] = 10*ND -> AY + ND -> y; + punto[2] = 10*ND -> AX + CONST + ND -> x; punto[3] = 11*ND -> AY + ND -> y; + punto[4] = 10*ND -> AX + CONST + ND -> x; punto[5] = 20*ND -> AY + ND -> y; + punto[6] = 8*ND -> AX + CONST + ND -> x; punto[7] = 18*ND -> AY + ND -> y; + punto[8] = 8*ND -> AX + CONST + ND -> x; punto[9] = 11*ND -> AY + ND -> y; + fillpoly( 5, punto ); + break; + case 2: + punto[0] = 2*ND -> AX + CONST + ND -> x; punto[1] = 18*ND -> AY + ND -> y; + punto[2] = 8*ND -> AX + CONST + ND -> x; punto[3] = 18*ND -> AY + ND -> y; + punto[4] = 10*ND -> AX + CONST + ND -> x; punto[5] = 20*ND -> AY + ND -> y; + punto[6] = 0*ND -> AX + CONST + ND -> x; punto[7] = 20*ND -> AY + ND -> y; + punto[8] = 2*ND -> AX + CONST + ND -> x; punto[9] = 18*ND -> AY + ND -> y; + fillpoly( 5, punto ); + break; + default: + break; + } + } + DnTmp[0] /= 2; + DnTmp[1] /= 2; + } + } + } + + if ( signo != old_signo ) + { + + if ( (old_signo = signo) == 1 ) + { + setfillstyle(SOLID_FILL, ND -> C1); + + int punto1[12]; + punto1[0] = 1*ND -> AX + ND -> x; punto1[1] = 10*ND -> AY + ND -> y; + punto1[2] = 2*ND -> AX + ND -> x; punto1[3] = 9*ND -> AY + ND -> y; + punto1[4] = 8*ND -> AX + ND -> x; punto1[5] = 9*ND -> AY + ND -> y; + punto1[6] = 9*ND -> AX + ND -> x; punto1[7] = 10*ND -> AY + ND -> y; + punto1[8] = 8*ND -> AX + ND -> x; punto1[9] = 11*ND -> AY + ND -> y; + punto1[10] = 2*ND -> AX + ND -> x; punto1[11] = 11*ND -> AY +ND -> y; + fillpoly( 6, punto1 ); + } + } + + vez = 1; + return 0; +} + + + + + + + + + + +void Fuente_Amplia( char *Frase, p_graphics *FA ) +{ +// C A R T E L D I G I T A L +//*// ( 27 ) - 2 ===> 25 [ Fuente de 8x8 ] +//* ^___ El tama¤o ha sido reoptimizado para que sea variable seg£n las +//* necesidades de cada programador. ( cuando AX = AY = 1 --> T^ ) +//* ........ . . . o . . . . o o o o o o . . +//* ........ . . o . o . . . . o . . . . o . +//* ........ . o . . . o . . . o . . . . o . +//* ........ o . . . . . o . . o o o o o . . +//* ........ o o o o o o o . . o . . . . o . +//* ........ o . . . . . o . . o . . . . o . +//* ........ o . . . . . o . . o . . . o . . +//* ........ o . . . . . o . o o o o o . . . +//* +int i; +char j, j1; + + +static char FraseBit[110][8]; +static char Frase1[100]; + +//static unsigned int loop; +static unsigned int Flen; + char c_elec; + char bit_s; + char *Frase_seg; +static char Flen1; + Frase_seg = Frase1; + +if ( strcmp( Frase1, Frase ) != 0 ) + { + strncpy( Frase1, Frase, 99 ); + Frase1[99] = '\0'; + j = i = strlen( Frase ); + Flen = i * 8; + char cont = 0; + + if ( i < FA -> ndigitos ) + i += FA -> ndigitos - i; + else + i += 5; + + Flen1 = i; + + // Almacenamos en la Frase a Bit's la FRASE A BIT'S + while( cont <= i ) + { + // Descomponemos cada caracter en un patron de BIT's + if ( (cont - j) > 0 ) + { + FraseBit[cont][0] = 0x00; + FraseBit[cont][1] = 0x00; + FraseBit[cont][2] = 0x00; + FraseBit[cont][3] = 0x00; + FraseBit[cont][4] = 0x00; + FraseBit[cont][5] = 0x00; + FraseBit[cont][6] = 0x00; + FraseBit[cont][7] = 0x00; + } else + switch( *Frase_seg ) + { + case 'A': + case 'a': + FraseBit[cont][0] = 0x10; // 0001 0000; + FraseBit[cont][1] = 0x38; // 0011 1000; + FraseBit[cont][2] = 0x6C; // 0110 1100; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xFE; // 1111 1110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'B': + case 'b': + FraseBit[cont][0] = 0xFC; // 1111 1100; + FraseBit[cont][1] = 0x66; // 0110 0110; + FraseBit[cont][2] = 0x6C; // 0110 1100; + FraseBit[cont][3] = 0x78; // 0111 1000; + FraseBit[cont][4] = 0x6C; // 0110 1100; + FraseBit[cont][5] = 0x66; // 0110 0110; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xFC; // 1111 1100; + break; + case 'C': + case 'c': + FraseBit[cont][0] = 0x78; // 0111 1000; + FraseBit[cont][1] = 0xCC; // 1100 1100; + FraseBit[cont][2] = 0xC0; // 1100 0000; + FraseBit[cont][3] = 0xC0; // 1100 0000; + FraseBit[cont][4] = 0xC0; // 1100 0000; + FraseBit[cont][5] = 0xC0; // 1100 0000; + FraseBit[cont][6] = 0xCC; // 1100 1100; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + case 'D': + case 'd': + FraseBit[cont][0] = 0xF8; // 1111 1000; + FraseBit[cont][1] = 0x6C; // 0110 1100; + FraseBit[cont][2] = 0x66; // 0110 0110; + FraseBit[cont][3] = 0x66; // 0110 0110; + FraseBit[cont][4] = 0x66; // 0110 0110; + FraseBit[cont][5] = 0x66; // 0110 0110; + FraseBit[cont][6] = 0x6C; // 0110 1100; + FraseBit[cont][7] = 0xF8; // 1111 1000; + break; + case 'E': + case 'e': + FraseBit[cont][0] = 0xFE; // 1111 1110; + FraseBit[cont][1] = 0x66; // 0110 0110; + FraseBit[cont][2] = 0x62; // 0110 0010; + FraseBit[cont][3] = 0x68; // 0110 1000; + FraseBit[cont][4] = 0x78; // 0111 1000; + FraseBit[cont][5] = 0x68; // 0110 1010; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xFE; // 1111 1110; + break; + case 'F': + case 'f': + FraseBit[cont][0] = 0xFE; // 1111 1110; + FraseBit[cont][1] = 0x66; // 0110 0110; + FraseBit[cont][2] = 0x62; // 0110 0010; + FraseBit[cont][3] = 0x68; // 0110 1000; + FraseBit[cont][4] = 0x78; // 0111 1000; + FraseBit[cont][5] = 0x68; // 0110 1000; + FraseBit[cont][6] = 0x60; // 0110 0000; + FraseBit[cont][7] = 0xF0; // 1111 0000; + break; + case 'G': + case 'g': + FraseBit[cont][0] = 0x7C; // 0111 1100; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC2; // 1100 0010; + FraseBit[cont][3] = 0xC0; // 1100 0000; + FraseBit[cont][4] = 0xDE; // 1101 1110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0x3A; // 0011 1010; + break; + case 'H': + case 'h': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xFE; // 1111 1110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'I': + case 'i': + FraseBit[cont][0] = 0x7E; // 0111 1110; + FraseBit[cont][1] = 0x18; // 0001 1000; + FraseBit[cont][2] = 0x18; // 0001 1000; + FraseBit[cont][3] = 0x18; // 0001 1000; + FraseBit[cont][4] = 0x18; // 0001 1000; + FraseBit[cont][5] = 0x18; // 0001 1000; + FraseBit[cont][6] = 0x18; // 0001 1000; + FraseBit[cont][7] = 0x7E; // 0111 1110; + break; + case 'J': + case 'j': + FraseBit[cont][0] = 0x1E; // 0001 1110; + FraseBit[cont][1] = 0x0C; // 0000 1100; + FraseBit[cont][2] = 0x0C; // 0000 1100; + FraseBit[cont][3] = 0x0C; // 0000 1100; + FraseBit[cont][4] = 0x0C; // 0000 1100; + FraseBit[cont][5] = 0xCC; // 1100 1100; + FraseBit[cont][6] = 0xCC; // 1100 1100; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + case 'K': + case 'k': + FraseBit[cont][0] = 0xE6; // 1110 0110; + FraseBit[cont][1] = 0x66; // 0110 0110; + FraseBit[cont][2] = 0x6C; // 0110 1100; + FraseBit[cont][3] = 0x78; // 0111 1000; + FraseBit[cont][4] = 0x6C; // 0110 1100; + FraseBit[cont][5] = 0x66; // 0110 0110; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xE6; // 1110 0110; + break; + case 'L': + case 'l': + FraseBit[cont][0] = 0xF0; // 1111 0000; + FraseBit[cont][1] = 0x60; // 0110 0000; + FraseBit[cont][2] = 0x60; // 0110 0000; + FraseBit[cont][3] = 0x60; // 0110 0000; + FraseBit[cont][4] = 0x60; // 0110 0000; + FraseBit[cont][5] = 0x62; // 0110 0010; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xFE; // 1111 1110; + break; + case 'M': + case 'm': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xEE; // 1110 1110; + FraseBit[cont][2] = 0xD6; // 1101 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'N': + case 'n': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xE6; // 1110 0110; + FraseBit[cont][2] = 0xF6; // 1111 0110; + FraseBit[cont][3] = 0xDE; // 1101 1110; + FraseBit[cont][4] = 0xCE; // 1100 1110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case '¥': + case '¤': + FraseBit[cont][0] = 0x64; // 0110 0100; + FraseBit[cont][1] = 0x98; // 1001 1000; + FraseBit[cont][2] = 0x00; // 0000 0000; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xF6; // 1111 0110; + FraseBit[cont][5] = 0xDE; // 1101 1110; + FraseBit[cont][6] = 0xCE; // 1100 1110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'O': + case 'o': + FraseBit[cont][0] = 0x38; // 0011 1000; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x38; // 0011 1000; + break; + case 'P': + case 'p': + FraseBit[cont][0] = 0xFC; // 1111 1100; + FraseBit[cont][1] = 0x62; // 0110 0010; + FraseBit[cont][2] = 0x62; // 0110 0010; + FraseBit[cont][3] = 0x7C; // 0111 1100; + FraseBit[cont][4] = 0x60; // 0110 0000; + FraseBit[cont][5] = 0x60; // 0110 0000; + FraseBit[cont][6] = 0x60; // 0110 0000; + FraseBit[cont][7] = 0xF0; // 1111 0000; + break; + case 'Q': + case 'q': + FraseBit[cont][0] = 0x00; // 0011 1000; + FraseBit[cont][1] = 0x00; // 1100 0110; + FraseBit[cont][2] = 0x00; // 1100 0110; + FraseBit[cont][3] = 0x00; // 1100 0110; + FraseBit[cont][4] = 0x00; // 1101 0110; + FraseBit[cont][5] = 0x00; // 1101 1110; + FraseBit[cont][6] = 0x00; // 0111 1100; + FraseBit[cont][7] = 0x00; + + FraseBit[cont][0] = 0x38; // 0011 1000; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xCE; // 1100 1110; + FraseBit[cont][6] = 0x38; // 0011 1000; + FraseBit[cont][7] = 0x0E; // 0000 1110; + break; + case 'R': + case 'r': + FraseBit[cont][0] = 0xFC; // 1111 1100; + FraseBit[cont][1] = 0x62; // 0110 0010; + FraseBit[cont][2] = 0x62; // 0110 0010; + FraseBit[cont][3] = 0x7C; // 0111 1100; + FraseBit[cont][4] = 0x6E; // 0110 1110; + FraseBit[cont][5] = 0x66; // 0110 0110; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xE6; // 1110 0110; + break; + case 'S': + case 's': + FraseBit[cont][0] = 0x7C; // 0111 1100; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0x60; // 0110 0000; + FraseBit[cont][3] = 0x18; // 0001 1000; + FraseBit[cont][4] = 0x0C; // 0000 1100; + FraseBit[cont][5] = 0x06; // 0000 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case 'T': + case 't': + FraseBit[cont][0] = 0xFC; // 1111 1100; + FraseBit[cont][1] = 0xB4; // 1011 0100; + FraseBit[cont][2] = 0x30; // 0011 0000; + FraseBit[cont][3] = 0x30; // 0011 0000; + FraseBit[cont][4] = 0x30; // 0011 0000; + FraseBit[cont][5] = 0x30; // 0011 0000; + FraseBit[cont][6] = 0x30; // 0011 0000; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + case 'U': + case 'u': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case 'V': + case 'v': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0x6C; // 0110 1100; + FraseBit[cont][6] = 0x38; // 0011 1000; + FraseBit[cont][7] = 0x10; // 0001 0000; + break; + case 'W': + case 'w': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xD6; // 1101 0110; + FraseBit[cont][5] = 0xD6; // 1101 0110; + FraseBit[cont][6] = 0x7C; // 0111 1100; + FraseBit[cont][7] = 0x28; // 0010 1000; + break; + case 'X': + case 'x': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0x44; // 0100 0100; + FraseBit[cont][2] = 0x6C; // 0110 1100; + FraseBit[cont][3] = 0x38; // 0011 1000; + FraseBit[cont][4] = 0x38; // 0011 1000; + FraseBit[cont][5] = 0x6C; // 0110 1100; + FraseBit[cont][6] = 0x44; // 0100 0100; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'Y': + case 'y': + FraseBit[cont][0] = 0xCC; // 1100 1100; + FraseBit[cont][1] = 0xCC; // 1100 1100; + FraseBit[cont][2] = 0xCC; // 1100 1100; + FraseBit[cont][3] = 0x78; // 0111 1000; + FraseBit[cont][4] = 0x30; // 0011 0000; + FraseBit[cont][5] = 0x30; // 0011 0000; + FraseBit[cont][6] = 0x30; // 0011 0000; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + case 'Z': + case 'z': + FraseBit[cont][0] = 0xFE; // 1111 1110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0x8C; // 1000 1100; + FraseBit[cont][3] = 0x18; // 0001 1000; + FraseBit[cont][4] = 0x30; // 0011 0000; + FraseBit[cont][5] = 0x62; // 0110 0010; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xFE; // 1111 1110; + break; + + case '0': + FraseBit[cont][0] = 0x38; // 0011 1000; + FraseBit[cont][1] = 0xCE; // 1100 1110; + FraseBit[cont][2] = 0xCE; // 1100 1110; + FraseBit[cont][3] = 0xD6; // 1101 0110; + FraseBit[cont][4] = 0xD6; // 1101 0110; + FraseBit[cont][5] = 0xE6; // 1110 0110; + FraseBit[cont][6] = 0xE6; // 1110 0110; + FraseBit[cont][7] = 0x38; // 0011 1000; + break; + case '1': + FraseBit[cont][0] = 0x0C; // 0000 1100; + FraseBit[cont][1] = 0x1C; // 0001 1100; + FraseBit[cont][2] = 0x3C; // 0011 1100; + FraseBit[cont][3] = 0x0C; // 0000 1100; + FraseBit[cont][4] = 0x0C; // 0000 1100; + FraseBit[cont][5] = 0x0C; // 0000 1100; + FraseBit[cont][6] = 0x0C; // 0000 1100; + FraseBit[cont][7] = 0x1E; // 0001 1110; + break; + case '2': + FraseBit[cont][0] = 0x78; // 0111 1000; + FraseBit[cont][1] = 0xCC; // 1100 1100; + FraseBit[cont][2] = 0x06; // 0000 0110; + FraseBit[cont][3] = 0x0C; // 0000 1100; + FraseBit[cont][4] = 0x18; // 0001 1000; + FraseBit[cont][5] = 0x30; // 0011 0000; + FraseBit[cont][6] = 0x60; // 0110 0000; + FraseBit[cont][7] = 0x7E; // 0111 1110; + break; + case '3': + FraseBit[cont][0] = 0x78; // 0111 1000; + FraseBit[cont][1] = 0xCC; // 1100 1100; + FraseBit[cont][2] = 0x06; // 0000 0110; + FraseBit[cont][3] = 0x0C; // 0000 1100; + FraseBit[cont][4] = 0x18; // 0001 1000; + FraseBit[cont][5] = 0x0C; // 0000 1100; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case '4': + FraseBit[cont][0] = 0x0C; // 0000 1100; + FraseBit[cont][1] = 0x1C; // 0001 1100; + FraseBit[cont][2] = 0x2C; // 0010 1100; + FraseBit[cont][3] = 0x4C; // 0100 1100; + FraseBit[cont][4] = 0xFE; // 1111 1110; + FraseBit[cont][5] = 0x0C; // 0000 1100; + FraseBit[cont][6] = 0x0C; // 0000 1100; + FraseBit[cont][7] = 0x1E; // 0001 1110; + break; + case '5': + FraseBit[cont][0] = 0xFE; // 1111 1110; + FraseBit[cont][1] = 0xC0; // 1100 0000; + FraseBit[cont][2] = 0xC0; // 1100 0000; + FraseBit[cont][3] = 0xF8; // 1111 1000; + FraseBit[cont][4] = 0x0C; // 0000 1100; + FraseBit[cont][5] = 0x06; // 0000 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case '6': + FraseBit[cont][0] = 0x3E; // 0011 1110; + FraseBit[cont][1] = 0x60; // 0110 0000; + FraseBit[cont][2] = 0xC0; // 1100 0000; + FraseBit[cont][3] = 0xFC; // 1111 1100; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case '7': + FraseBit[cont][0] = 0xFE; // 1111 1110; + FraseBit[cont][1] = 0x06; // 0000 0110; + FraseBit[cont][2] = 0x06; // 0000 0110; + FraseBit[cont][3] = 0x0C; // 0000 1100; + FraseBit[cont][4] = 0x0C; // 0000 1100; + FraseBit[cont][5] = 0x18; // 0001 1000; + FraseBit[cont][6] = 0x18; // 0001 1000; + FraseBit[cont][7] = 0x18; // 0001 1000; + break; + + case '8': + FraseBit[cont][0] = 0x7C; // 0111 1100; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0x7C; // 0111 1100; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case '9': + FraseBit[cont][0] = 0x7C; // 0111 1100; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0x7E; // 0111 1110; + FraseBit[cont][4] = 0x06; // 0000 0110; + FraseBit[cont][5] = 0x06; // 0000 0110; + FraseBit[cont][6] = 0x0C; // 0000 1100; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + + case '*': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x18; // 0001 1000; + FraseBit[cont][2] = 0x5A; // 0101 1010; + FraseBit[cont][3] = 0x3C; // 0011 1100; + FraseBit[cont][4] = 0x7E; // 0111 1110; + FraseBit[cont][5] = 0x3C; // 0011 1100; + FraseBit[cont][6] = 0x5A; // 0101 1010; + FraseBit[cont][7] = 0x18; // 0001 1000; + break; + case '-': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x00; // 0000 0000; + FraseBit[cont][2] = 0x00; // 0000 0000; + FraseBit[cont][3] = 0xFE; // 1111 1110; + FraseBit[cont][4] = 0xFE; // 1111 1110; + FraseBit[cont][5] = 0x00; // 0000 0000; + FraseBit[cont][6] = 0x00; // 0000 0000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + case '_': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x00; // 0000 0000; + FraseBit[cont][2] = 0x00; // 0000 0000; + FraseBit[cont][3] = 0x00; // 0000 0000; + FraseBit[cont][4] = 0x00; // 0000 0000; + FraseBit[cont][5] = 0x00; // 0000 0000; + FraseBit[cont][6] = 0xFE; // 1111 1110; + FraseBit[cont][7] = 0xFE; // 1111 1110; + break; + case '+': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x18; // 0001 1000; + FraseBit[cont][2] = 0x18; // 0001 1000; + FraseBit[cont][3] = 0xFE; // 1111 1110; + FraseBit[cont][4] = 0xFE; // 1111 1110; + FraseBit[cont][5] = 0x18; // 0001 1000; + FraseBit[cont][6] = 0x18; // 0001 1000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + case '<': + case '(': + FraseBit[cont][0] = 0x18; // 0001 1000; + FraseBit[cont][1] = 0x30; // 0011 0000; + FraseBit[cont][2] = 0x60; // 0110 0000; + FraseBit[cont][3] = 0xC0; // 1100 0000; + FraseBit[cont][4] = 0xC0; // 1100 0000; + FraseBit[cont][5] = 0x60; // 0110 0000; + FraseBit[cont][6] = 0x30; // 0011 0000; + FraseBit[cont][7] = 0x18; // 0001 1000; + break; + case '>': + case ')': + FraseBit[cont][0] = 0x18; // 0001 1000; + FraseBit[cont][1] = 0x0C; // 0000 1100; + FraseBit[cont][2] = 0x06; // 0000 0110; + FraseBit[cont][3] = 0x03; // 0000 0011; + FraseBit[cont][4] = 0x03; // 0000 0011; + FraseBit[cont][5] = 0x06; // 0000 0110; + FraseBit[cont][6] = 0x0C; // 0000 1100; + FraseBit[cont][7] = 0x18; // 0001 1000; + break; + case ':': + case ';': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x30; // 0011 0000; + FraseBit[cont][2] = 0x30; // 0011 0000; + FraseBit[cont][3] = 0x00; // 0000 0000; + FraseBit[cont][4] = 0x00; // 0000 0000; + FraseBit[cont][5] = 0x30; // 0011 0000; + FraseBit[cont][6] = 0x30; // 0011 0000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + case '\'': + FraseBit[cont][0] = 0x0C; // 0000 1100; + FraseBit[cont][1] = 0x0C; // 0000 1100; + FraseBit[cont][2] = 0x0C; // 0000 1100; + FraseBit[cont][3] = 0x10; // 0001 1000; + FraseBit[cont][4] = 0x00; // 0000 0000; + FraseBit[cont][5] = 0x00; // 0000 0000; + FraseBit[cont][6] = 0x00; // 0000 0000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + case '\\': + FraseBit[cont][0] = 0xD0; // 1100 0000; + FraseBit[cont][1] = 0x60; // 0110 0000; + FraseBit[cont][2] = 0x30; // 0011 0000; + FraseBit[cont][3] = 0x18; // 0001 1000; + FraseBit[cont][4] = 0x0D; // 0000 1100; + FraseBit[cont][5] = 0x06; // 0000 0110; + FraseBit[cont][6] = 0x03; // 0000 0011; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + case '/': + FraseBit[cont][0] = 0x03; // 0000 0011; + FraseBit[cont][1] = 0x06; // 0000 0110; + FraseBit[cont][2] = 0x0D; // 0000 1100; + FraseBit[cont][3] = 0x18; // 0001 1000; + FraseBit[cont][4] = 0x30; // 0011 0000; + FraseBit[cont][5] = 0x60; // 0110 0000; + FraseBit[cont][6] = 0xD0; // 1100 0000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + case '|': + FraseBit[cont][0] = 0x18; // 0001 1000; + FraseBit[cont][1] = 0x18; // 0001 1000; + FraseBit[cont][2] = 0x18; // 0001 1000; + FraseBit[cont][3] = 0x18; // 0001 1000; + FraseBit[cont][4] = 0x18; // 0001 1000; + FraseBit[cont][5] = 0x18; // 0001 1000; + FraseBit[cont][6] = 0x18; // 0001 1000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + default: + FraseBit[cont][0] = 0x00; + FraseBit[cont][1] = 0x00; + FraseBit[cont][2] = 0x00; + FraseBit[cont][3] = 0x00; + FraseBit[cont][4] = 0x00; + FraseBit[cont][5] = 0x00; + FraseBit[cont][6] = 0x00; + FraseBit[cont][7] = 0x00; + break; + } + cont++; + Frase_seg++; + } + } else { + // Rotamos la frase + char FrBit_tmp[8]; + // Almacenamos el 1er bit que vamos a perder... + for ( j1=0; j1<8; j1++ ) + FrBit_tmp[j1] = 0x01 & ( FraseBit[0][j1] >> 7 ); + + for ( j=0; j> 7 ) ); + } + for ( j1=0; j1<8; j1++ ) + FraseBit[Flen1-1][j1] = ( FraseBit[Flen1-1][j1] & 0xFE ) | FrBit_tmp[j1]; + } + +// ndigitos --> m x. = 40 + for ( i=0; i < FA->ndigitos; i ++ ) + { + for ( j=0, j1=0; j1<8; j+=2*FA->AX, j1++ ) + { + // Analizamos el patron de BIT's y lo imprimimos + // FraseBit[cont][0] + // ^ ^----- N£mero de byte del digito ( 8x8 ) + // |_________ N£mero de digito alfa-numerico + for ( bit_s = 0; bit_s < 8; bit_s++ ) + { + if ( FraseBit[i][bit_s] & ( (char)0x01 << (7-j1) ) ) c_elec = FA->C2; else c_elec = FA->C1; + putpixel ( FA->x + j + i*8*2*FA->AX, FA->y + 2*bit_s*FA->AY, c_elec ); + } + } + } +} +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +void Fuente_Amplia2( char *Frase, p_graphics *FA ) +{ +// C A R T E L D I G I T A L +//*// ( 27 ) - 2 ===> 25 [ Fuente de 8x8 ] +//* ^___ El tama¤o ha sido reoptimizado para que sea variable seg£n las +//* necesidades de cada programador. ( cuando AX = AY = 1 --> T^ ) +//* ........ . . . o . . . . o o o o o o . . +//* ........ . . o . o . . . . o . . . . o . +//* ........ . o . . . o . . . o . . . . o . +//* ........ o . . . . . o . . o o o o o . . +//* ........ o o o o o o o . . o . . . . o . +//* ........ o . . . . . o . . o . . . . o . +//* ........ o . . . . . o . . o . . . o . . +//* ........ o . . . . . o . o o o o o . . . +//* +int i; +char j, j1; + + +static char FraseBit[110][8]; +static char Frase1[100]; + +//static unsigned int loop; +static unsigned int Flen; + char c_elec; + char bit_s; + char *Frase_seg; +static char Flen1; + Frase_seg = Frase1; + +if ( strcmp( Frase1, Frase ) != 0 ) + { + strncpy( Frase1, Frase, 99 ); + Frase1[99] = '\0'; + j = i = strlen( Frase ); + Flen = i * 8; + char cont = 0; + + if ( i < FA -> ndigitos ) + i += FA -> ndigitos - i; + else + i += 5; + + Flen1 = i; + + // Almacenamos en la Frase a Bit's la FRASE A BIT'S + while( cont <= i ) + { + // Descomponemos cada caracter en un patron de BIT's + if ( (cont - j) > 0 ) + { + FraseBit[cont][0] = 0x00; + FraseBit[cont][1] = 0x00; + FraseBit[cont][2] = 0x00; + FraseBit[cont][3] = 0x00; + FraseBit[cont][4] = 0x00; + FraseBit[cont][5] = 0x00; + FraseBit[cont][6] = 0x00; + FraseBit[cont][7] = 0x00; + } else + switch( *Frase_seg ) + { + case 'A': + case 'a': + FraseBit[cont][0] = 0x10; // 0001 0000; + FraseBit[cont][1] = 0x38; // 0011 1000; + FraseBit[cont][2] = 0x6C; // 0110 1100; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xFE; // 1111 1110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'B': + case 'b': + FraseBit[cont][0] = 0xFC; // 1111 1100; + FraseBit[cont][1] = 0x66; // 0110 0110; + FraseBit[cont][2] = 0x6C; // 0110 1100; + FraseBit[cont][3] = 0x78; // 0111 1000; + FraseBit[cont][4] = 0x6C; // 0110 1100; + FraseBit[cont][5] = 0x66; // 0110 0110; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xFC; // 1111 1100; + break; + case 'C': + case 'c': + FraseBit[cont][0] = 0x78; // 0111 1000; + FraseBit[cont][1] = 0xCC; // 1100 1100; + FraseBit[cont][2] = 0xC0; // 1100 0000; + FraseBit[cont][3] = 0xC0; // 1100 0000; + FraseBit[cont][4] = 0xC0; // 1100 0000; + FraseBit[cont][5] = 0xC0; // 1100 0000; + FraseBit[cont][6] = 0xCC; // 1100 1100; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + case 'D': + case 'd': + FraseBit[cont][0] = 0xF8; // 1111 1000; + FraseBit[cont][1] = 0x6C; // 0110 1100; + FraseBit[cont][2] = 0x66; // 0110 0110; + FraseBit[cont][3] = 0x66; // 0110 0110; + FraseBit[cont][4] = 0x66; // 0110 0110; + FraseBit[cont][5] = 0x66; // 0110 0110; + FraseBit[cont][6] = 0x6C; // 0110 1100; + FraseBit[cont][7] = 0xF8; // 1111 1000; + break; + case 'E': + case 'e': + FraseBit[cont][0] = 0xFE; // 1111 1110; + FraseBit[cont][1] = 0x66; // 0110 0110; + FraseBit[cont][2] = 0x62; // 0110 0010; + FraseBit[cont][3] = 0x68; // 0110 1000; + FraseBit[cont][4] = 0x78; // 0111 1000; + FraseBit[cont][5] = 0x68; // 0110 1010; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xFE; // 1111 1110; + break; + case 'F': + case 'f': + FraseBit[cont][0] = 0xFE; // 1111 1110; + FraseBit[cont][1] = 0x66; // 0110 0110; + FraseBit[cont][2] = 0x62; // 0110 0010; + FraseBit[cont][3] = 0x68; // 0110 1000; + FraseBit[cont][4] = 0x78; // 0111 1000; + FraseBit[cont][5] = 0x68; // 0110 1000; + FraseBit[cont][6] = 0x60; // 0110 0000; + FraseBit[cont][7] = 0xF0; // 1111 0000; + break; + case 'G': + case 'g': + FraseBit[cont][0] = 0x7C; // 0111 1100; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC2; // 1100 0010; + FraseBit[cont][3] = 0xC0; // 1100 0000; + FraseBit[cont][4] = 0xDE; // 1101 1110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0x3A; // 0011 1010; + break; + case 'H': + case 'h': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xFE; // 1111 1110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'I': + case 'i': + FraseBit[cont][0] = 0x7E; // 0111 1110; + FraseBit[cont][1] = 0x18; // 0001 1000; + FraseBit[cont][2] = 0x18; // 0001 1000; + FraseBit[cont][3] = 0x18; // 0001 1000; + FraseBit[cont][4] = 0x18; // 0001 1000; + FraseBit[cont][5] = 0x18; // 0001 1000; + FraseBit[cont][6] = 0x18; // 0001 1000; + FraseBit[cont][7] = 0x7E; // 0111 1110; + break; + case 'J': + case 'j': + FraseBit[cont][0] = 0x1E; // 0001 1110; + FraseBit[cont][1] = 0x0C; // 0000 1100; + FraseBit[cont][2] = 0x0C; // 0000 1100; + FraseBit[cont][3] = 0x0C; // 0000 1100; + FraseBit[cont][4] = 0x0C; // 0000 1100; + FraseBit[cont][5] = 0xCC; // 1100 1100; + FraseBit[cont][6] = 0xCC; // 1100 1100; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + case 'K': + case 'k': + FraseBit[cont][0] = 0xE6; // 1110 0110; + FraseBit[cont][1] = 0x66; // 0110 0110; + FraseBit[cont][2] = 0x6C; // 0110 1100; + FraseBit[cont][3] = 0x78; // 0111 1000; + FraseBit[cont][4] = 0x6C; // 0110 1100; + FraseBit[cont][5] = 0x66; // 0110 0110; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xE6; // 1110 0110; + break; + case 'L': + case 'l': + FraseBit[cont][0] = 0xF0; // 1111 0000; + FraseBit[cont][1] = 0x60; // 0110 0000; + FraseBit[cont][2] = 0x60; // 0110 0000; + FraseBit[cont][3] = 0x60; // 0110 0000; + FraseBit[cont][4] = 0x60; // 0110 0000; + FraseBit[cont][5] = 0x62; // 0110 0010; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xFE; // 1111 1110; + break; + case 'M': + case 'm': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xEE; // 1110 1110; + FraseBit[cont][2] = 0xD6; // 1101 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'N': + case 'n': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xE6; // 1110 0110; + FraseBit[cont][2] = 0xF6; // 1111 0110; + FraseBit[cont][3] = 0xDE; // 1101 1110; + FraseBit[cont][4] = 0xCE; // 1100 1110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case '¥': + case '¤': + FraseBit[cont][0] = 0x64; // 0110 0100; + FraseBit[cont][1] = 0x98; // 1001 1000; + FraseBit[cont][2] = 0x00; // 0000 0000; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xF6; // 1111 0110; + FraseBit[cont][5] = 0xDE; // 1101 1110; + FraseBit[cont][6] = 0xCE; // 1100 1110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'O': + case 'o': + FraseBit[cont][0] = 0x38; // 0011 1000; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x38; // 0011 1000; + break; + case 'P': + case 'p': + FraseBit[cont][0] = 0xFC; // 1111 1100; + FraseBit[cont][1] = 0x62; // 0110 0010; + FraseBit[cont][2] = 0x62; // 0110 0010; + FraseBit[cont][3] = 0x7C; // 0111 1100; + FraseBit[cont][4] = 0x60; // 0110 0000; + FraseBit[cont][5] = 0x60; // 0110 0000; + FraseBit[cont][6] = 0x60; // 0110 0000; + FraseBit[cont][7] = 0xF0; // 1111 0000; + break; + case 'Q': + case 'q': + FraseBit[cont][0] = 0x00; // 0011 1000; + FraseBit[cont][1] = 0x00; // 1100 0110; + FraseBit[cont][2] = 0x00; // 1100 0110; + FraseBit[cont][3] = 0x00; // 1100 0110; + FraseBit[cont][4] = 0x00; // 1101 0110; + FraseBit[cont][5] = 0x00; // 1101 1110; + FraseBit[cont][6] = 0x00; // 0111 1100; + FraseBit[cont][7] = 0x00; + + FraseBit[cont][0] = 0x38; // 0011 1000; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xCE; // 1100 1110; + FraseBit[cont][6] = 0x38; // 0011 1000; + FraseBit[cont][7] = 0x0E; // 0000 1110; + break; + case 'R': + case 'r': + FraseBit[cont][0] = 0xFC; // 1111 1100; + FraseBit[cont][1] = 0x62; // 0110 0010; + FraseBit[cont][2] = 0x62; // 0110 0010; + FraseBit[cont][3] = 0x7C; // 0111 1100; + FraseBit[cont][4] = 0x6E; // 0110 1110; + FraseBit[cont][5] = 0x66; // 0110 0110; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xE6; // 1110 0110; + break; + case 'S': + case 's': + FraseBit[cont][0] = 0x7C; // 0111 1100; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0x60; // 0110 0000; + FraseBit[cont][3] = 0x18; // 0001 1000; + FraseBit[cont][4] = 0x0C; // 0000 1100; + FraseBit[cont][5] = 0x06; // 0000 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case 'T': + case 't': + FraseBit[cont][0] = 0xFC; // 1111 1100; + FraseBit[cont][1] = 0xB4; // 1011 0100; + FraseBit[cont][2] = 0x30; // 0011 0000; + FraseBit[cont][3] = 0x30; // 0011 0000; + FraseBit[cont][4] = 0x30; // 0011 0000; + FraseBit[cont][5] = 0x30; // 0011 0000; + FraseBit[cont][6] = 0x30; // 0011 0000; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + case 'U': + case 'u': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case 'V': + case 'v': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0x6C; // 0110 1100; + FraseBit[cont][6] = 0x38; // 0011 1000; + FraseBit[cont][7] = 0x10; // 0001 0000; + break; + case 'W': + case 'w': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xD6; // 1101 0110; + FraseBit[cont][5] = 0xD6; // 1101 0110; + FraseBit[cont][6] = 0x7C; // 0111 1100; + FraseBit[cont][7] = 0x28; // 0010 1000; + break; + case 'X': + case 'x': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0x44; // 0100 0100; + FraseBit[cont][2] = 0x6C; // 0110 1100; + FraseBit[cont][3] = 0x38; // 0011 1000; + FraseBit[cont][4] = 0x38; // 0011 1000; + FraseBit[cont][5] = 0x6C; // 0110 1100; + FraseBit[cont][6] = 0x44; // 0100 0100; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'Y': + case 'y': + FraseBit[cont][0] = 0xCC; // 1100 1100; + FraseBit[cont][1] = 0xCC; // 1100 1100; + FraseBit[cont][2] = 0xCC; // 1100 1100; + FraseBit[cont][3] = 0x78; // 0111 1000; + FraseBit[cont][4] = 0x30; // 0011 0000; + FraseBit[cont][5] = 0x30; // 0011 0000; + FraseBit[cont][6] = 0x30; // 0011 0000; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + case 'Z': + case 'z': + FraseBit[cont][0] = 0xFE; // 1111 1110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0x8C; // 1000 1100; + FraseBit[cont][3] = 0x18; // 0001 1000; + FraseBit[cont][4] = 0x30; // 0011 0000; + FraseBit[cont][5] = 0x62; // 0110 0010; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xFE; // 1111 1110; + break; + case '0': + FraseBit[cont][0] = 0x38; // 0011 1000; + FraseBit[cont][1] = 0xCE; // 1100 1110; + FraseBit[cont][2] = 0xCE; // 1100 1110; + FraseBit[cont][3] = 0xD6; // 1101 0110; + FraseBit[cont][4] = 0xD6; // 1101 0110; + FraseBit[cont][5] = 0xE6; // 1110 0110; + FraseBit[cont][6] = 0xE6; // 1110 0110; + FraseBit[cont][7] = 0x38; // 0011 1000; + break; + case '1': + FraseBit[cont][0] = 0x0C; // 0000 1100; + FraseBit[cont][1] = 0x1C; // 0001 1100; + FraseBit[cont][2] = 0x3C; // 0011 1100; + FraseBit[cont][3] = 0x0C; // 0000 1100; + FraseBit[cont][4] = 0x0C; // 0000 1100; + FraseBit[cont][5] = 0x0C; // 0000 1100; + FraseBit[cont][6] = 0x0C; // 0000 1100; + FraseBit[cont][7] = 0x1E; // 0001 1110; + break; + case '2': + FraseBit[cont][0] = 0x78; // 0111 1000; + FraseBit[cont][1] = 0xCC; // 1100 1100; + FraseBit[cont][2] = 0x06; // 0000 0110; + FraseBit[cont][3] = 0x0C; // 0000 1100; + FraseBit[cont][4] = 0x18; // 0001 1000; + FraseBit[cont][5] = 0x30; // 0011 0000; + FraseBit[cont][6] = 0x60; // 0110 0000; + FraseBit[cont][7] = 0x7E; // 0111 1110; + break; + case '3': + FraseBit[cont][0] = 0x78; // 0111 1000; + FraseBit[cont][1] = 0xCC; // 1100 1100; + FraseBit[cont][2] = 0x06; // 0000 0110; + FraseBit[cont][3] = 0x0C; // 0000 1100; + FraseBit[cont][4] = 0x18; // 0001 1000; + FraseBit[cont][5] = 0x0C; // 0000 1100; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case '4': + FraseBit[cont][0] = 0x0C; // 0000 1100; + FraseBit[cont][1] = 0x1C; // 0001 1100; + FraseBit[cont][2] = 0x2C; // 0010 1100; + FraseBit[cont][3] = 0x4C; // 0100 1100; + FraseBit[cont][4] = 0xFE; // 1111 1110; + FraseBit[cont][5] = 0x0C; // 0000 1100; + FraseBit[cont][6] = 0x0C; // 0000 1100; + FraseBit[cont][7] = 0x1E; // 0001 1110; + break; + case '5': + FraseBit[cont][0] = 0xFE; // 1111 1110; + FraseBit[cont][1] = 0xC0; // 1100 0000; + FraseBit[cont][2] = 0xC0; // 1100 0000; + FraseBit[cont][3] = 0xF8; // 1111 1000; + FraseBit[cont][4] = 0x0C; // 0000 1100; + FraseBit[cont][5] = 0x06; // 0000 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case '6': + FraseBit[cont][0] = 0x3E; // 0011 1110; + FraseBit[cont][1] = 0x60; // 0110 0000; + FraseBit[cont][2] = 0xC0; // 1100 0000; + FraseBit[cont][3] = 0xFC; // 1111 1100; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case '8': + FraseBit[cont][0] = 0x7C; // 0111 1100; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0x7C; // 0111 1100; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case '9': + FraseBit[cont][0] = 0x7C; // 0111 1100; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0x7E; // 0111 1110; + FraseBit[cont][4] = 0x06; // 0000 0110; + FraseBit[cont][5] = 0x06; // 0000 0110; + FraseBit[cont][6] = 0x0C; // 0000 1100; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + + + + case '*': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x18; // 0001 1000; + FraseBit[cont][2] = 0x5A; // 0101 1010; + FraseBit[cont][3] = 0x3C; // 0011 1100; + FraseBit[cont][4] = 0x7E; // 0111 1110; + FraseBit[cont][5] = 0x3C; // 0011 1100; + FraseBit[cont][6] = 0x5A; // 0101 1010; + FraseBit[cont][7] = 0x18; // 0001 1000; + break; + case '-': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x00; // 0000 0000; + FraseBit[cont][2] = 0x00; // 0000 0000; + FraseBit[cont][3] = 0xFE; // 1111 1110; + FraseBit[cont][4] = 0xFE; // 1111 1110; + FraseBit[cont][5] = 0x00; // 0000 0000; + FraseBit[cont][6] = 0x00; // 0000 0000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + case '_': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x00; // 0000 0000; + FraseBit[cont][2] = 0x00; // 0000 0000; + FraseBit[cont][3] = 0x00; // 0000 0000; + FraseBit[cont][4] = 0x00; // 0000 0000; + FraseBit[cont][5] = 0x00; // 0000 0000; + FraseBit[cont][6] = 0xFE; // 1111 1110; + FraseBit[cont][7] = 0xFE; // 1111 1110; + break; + case '+': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x18; // 0001 1000; + FraseBit[cont][2] = 0x18; // 0001 1000; + FraseBit[cont][3] = 0xFE; // 1111 1110; + FraseBit[cont][4] = 0xFE; // 1111 1110; + FraseBit[cont][5] = 0x18; // 0001 1000; + FraseBit[cont][6] = 0x18; // 0001 1000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + case '<': + case '(': + FraseBit[cont][0] = 0x18; // 0001 1000; + FraseBit[cont][1] = 0x30; // 0011 0000; + FraseBit[cont][2] = 0x60; // 0110 0000; + FraseBit[cont][3] = 0xC0; // 1100 0000; + FraseBit[cont][4] = 0xC0; // 1100 0000; + FraseBit[cont][5] = 0x60; // 0110 0000; + FraseBit[cont][6] = 0x30; // 0011 0000; + FraseBit[cont][7] = 0x18; // 0001 1000; + break; + case '>': + case ')': + FraseBit[cont][0] = 0x18; // 0001 1000; + FraseBit[cont][1] = 0x0C; // 0000 1100; + FraseBit[cont][2] = 0x06; // 0000 0110; + FraseBit[cont][3] = 0x03; // 0000 0011; + FraseBit[cont][4] = 0x03; // 0000 0011; + FraseBit[cont][5] = 0x06; // 0000 0110; + FraseBit[cont][6] = 0x0C; // 0000 1100; + FraseBit[cont][7] = 0x18; // 0001 1000; + break; + case ':': + case ';': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x30; // 0011 0000; + FraseBit[cont][2] = 0x30; // 0011 0000; + FraseBit[cont][3] = 0x00; // 0000 0000; + FraseBit[cont][4] = 0x00; // 0000 0000; + FraseBit[cont][5] = 0x30; // 0011 0000; + FraseBit[cont][6] = 0x30; // 0011 0000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + case '\'': + FraseBit[cont][0] = 0x0C; // 0000 1100; + FraseBit[cont][1] = 0x0C; // 0000 1100; + FraseBit[cont][2] = 0x0C; // 0000 1100; + FraseBit[cont][3] = 0x10; // 0001 1000; + FraseBit[cont][4] = 0x00; // 0000 0000; + FraseBit[cont][5] = 0x00; // 0000 0000; + FraseBit[cont][6] = 0x00; // 0000 0000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + default: + FraseBit[cont][0] = 0x00; + FraseBit[cont][1] = 0x00; + FraseBit[cont][2] = 0x00; + FraseBit[cont][3] = 0x00; + FraseBit[cont][4] = 0x00; + FraseBit[cont][5] = 0x00; + FraseBit[cont][6] = 0x00; + FraseBit[cont][7] = 0x00; + break; + } + cont++; + Frase_seg++; + } + } else { + // Rotamos la frase + char FrBit_tmp[8]; + // Almacenamos el 1er bit que vamos a perder... + for ( j1=0; j1<8; j1++ ) + FrBit_tmp[j1] = 0x01 & ( FraseBit[0][j1] >> 7 ); + + for ( j=0; j> 7 ) ); + } + for ( j1=0; j1<8; j1++ ) + FraseBit[Flen1-1][j1] = ( FraseBit[Flen1-1][j1] & 0xFE ) | FrBit_tmp[j1]; + } + +// . . . . . . +// .ï ï. .ï ï. .ï ï. +// . . . . . +// __________.________________________.______________________.______________ +// . . . . . . +// . . . . . . +// ' .. ' ' .. ' ' .. ' +// +// . . +// . ï ï . +// . . +// ____________________._____________________.______________________________ +// . . ` ï +// . . ` ï +// . . ` ï +// . . . ` ï +// ` . . ï +// ndigitos --> m x. = 40 + //float i1; + int i1; + for ( i=0, i1=2; i < FA->ndigitos; i ++ ) + { + for ( j=0, j1=0; j1<8; j+=2*FA->AX, j1++ ) + { + // Analizamos el patron de BIT's y lo imprimimos + // FraseBit[cont][0] + // ^ ^----- N£mero de byte del digito ( 8x8 ) + // |_________ N£mero de digito alfa-numerico + for ( bit_s = 0; bit_s < 8; bit_s++, i1++/*+=.02*/ ) + { + if ( FraseBit[i][bit_s] & ( (char)0x01 << (7-j1) ) ) c_elec = FA->C2; else c_elec = FA->C1; + //putpixel ( FA->x + j + bit_s*2 + i*8*2*FA->AX, FA->y + sin( i1 )*20 + 2*bit_s*FA->AY, c_elec ); +putpixel ( FA->x + j - bit_s*2+(TabS[ (i+bit_s+j/*bit_s*/) % 255 ]-90) + i*8*2*FA->AX, FA->y - 100 +/* sin( i1 )*20*/TabS[i1 % 255] + 2*bit_s*FA->AY, c_elec ); + } +//y--> TabS[(i+j+bit_s) MOD FLen1] +//x--> + + } + } +} + + + + + + + + +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +void Fuente_Amplia3( char *Frase, p_graphics *FA ) +{ +int i; +char j, j1; + + +static char FraseBit[110][8]; +static char Frase1[100]; + +//static unsigned int loop; +static unsigned int Flen; + char c_elec; + char bit_s; + char *Frase_seg; +static char Flen1; + Frase_seg = Frase1; + +if ( strcmp( Frase1, Frase ) != 0 ) + { + strncpy( Frase1, Frase, 99 ); + Frase1[99] = '\0'; + j = i = strlen( Frase ); + Flen = i * 8; + char cont = 0; + + if ( i < FA -> ndigitos ) + i += FA -> ndigitos - i; + else + i += 5; + + Flen1 = i; + + // Almacenamos en la Frase a Bit's la FRASE A BIT'S + while( cont <= i ) + { + // Descomponemos cada caracter en un patron de BIT's + if ( (cont - j) > 0 ) + { + FraseBit[cont][0] = 0x00; + FraseBit[cont][1] = 0x00; + FraseBit[cont][2] = 0x00; + FraseBit[cont][3] = 0x00; + FraseBit[cont][4] = 0x00; + FraseBit[cont][5] = 0x00; + FraseBit[cont][6] = 0x00; + FraseBit[cont][7] = 0x00; + } else + switch( *Frase_seg ) + { + case 'A': + case 'a': + FraseBit[cont][0] = 0x10; // 0001 0000; + FraseBit[cont][1] = 0x38; // 0011 1000; + FraseBit[cont][2] = 0x6C; // 0110 1100; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xFE; // 1111 1110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'B': + case 'b': + FraseBit[cont][0] = 0xFC; // 1111 1100; + FraseBit[cont][1] = 0x66; // 0110 0110; + FraseBit[cont][2] = 0x6C; // 0110 1100; + FraseBit[cont][3] = 0x78; // 0111 1000; + FraseBit[cont][4] = 0x6C; // 0110 1100; + FraseBit[cont][5] = 0x66; // 0110 0110; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xFC; // 1111 1100; + break; + case 'C': + case 'c': + FraseBit[cont][0] = 0x78; // 0111 1000; + FraseBit[cont][1] = 0xCC; // 1100 1100; + FraseBit[cont][2] = 0xC0; // 1100 0000; + FraseBit[cont][3] = 0xC0; // 1100 0000; + FraseBit[cont][4] = 0xC0; // 1100 0000; + FraseBit[cont][5] = 0xC0; // 1100 0000; + FraseBit[cont][6] = 0xCC; // 1100 1100; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + case 'D': + case 'd': + FraseBit[cont][0] = 0xF8; // 1111 1000; + FraseBit[cont][1] = 0x6C; // 0110 1100; + FraseBit[cont][2] = 0x66; // 0110 0110; + FraseBit[cont][3] = 0x66; // 0110 0110; + FraseBit[cont][4] = 0x66; // 0110 0110; + FraseBit[cont][5] = 0x66; // 0110 0110; + FraseBit[cont][6] = 0x6C; // 0110 1100; + FraseBit[cont][7] = 0xF8; // 1111 1000; + break; + case 'E': + case 'e': + FraseBit[cont][0] = 0xFE; // 1111 1110; + FraseBit[cont][1] = 0x66; // 0110 0110; + FraseBit[cont][2] = 0x62; // 0110 0010; + FraseBit[cont][3] = 0x68; // 0110 1000; + FraseBit[cont][4] = 0x78; // 0111 1000; + FraseBit[cont][5] = 0x68; // 0110 1010; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xFE; // 1111 1110; + break; + case 'F': + case 'f': + FraseBit[cont][0] = 0xFE; // 1111 1110; + FraseBit[cont][1] = 0x66; // 0110 0110; + FraseBit[cont][2] = 0x62; // 0110 0010; + FraseBit[cont][3] = 0x68; // 0110 1000; + FraseBit[cont][4] = 0x78; // 0111 1000; + FraseBit[cont][5] = 0x68; // 0110 1000; + FraseBit[cont][6] = 0x60; // 0110 0000; + FraseBit[cont][7] = 0xF0; // 1111 0000; + break; + case 'G': + case 'g': + FraseBit[cont][0] = 0x7C; // 0111 1100; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC2; // 1100 0010; + FraseBit[cont][3] = 0xC0; // 1100 0000; + FraseBit[cont][4] = 0xDE; // 1101 1110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0x3A; // 0011 1010; + break; + case 'H': + case 'h': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xFE; // 1111 1110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'I': + case 'i': + FraseBit[cont][0] = 0x7E; // 0111 1110; + FraseBit[cont][1] = 0x18; // 0001 1000; + FraseBit[cont][2] = 0x18; // 0001 1000; + FraseBit[cont][3] = 0x18; // 0001 1000; + FraseBit[cont][4] = 0x18; // 0001 1000; + FraseBit[cont][5] = 0x18; // 0001 1000; + FraseBit[cont][6] = 0x18; // 0001 1000; + FraseBit[cont][7] = 0x7E; // 0111 1110; + break; + case 'J': + case 'j': + FraseBit[cont][0] = 0x1E; // 0001 1110; + FraseBit[cont][1] = 0x0C; // 0000 1100; + FraseBit[cont][2] = 0x0C; // 0000 1100; + FraseBit[cont][3] = 0x0C; // 0000 1100; + FraseBit[cont][4] = 0x0C; // 0000 1100; + FraseBit[cont][5] = 0xCC; // 1100 1100; + FraseBit[cont][6] = 0xCC; // 1100 1100; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + case 'K': + case 'k': + FraseBit[cont][0] = 0xE6; // 1110 0110; + FraseBit[cont][1] = 0x66; // 0110 0110; + FraseBit[cont][2] = 0x6C; // 0110 1100; + FraseBit[cont][3] = 0x78; // 0111 1000; + FraseBit[cont][4] = 0x6C; // 0110 1100; + FraseBit[cont][5] = 0x66; // 0110 0110; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xE6; // 1110 0110; + break; + case 'L': + case 'l': + FraseBit[cont][0] = 0xF0; // 1111 0000; + FraseBit[cont][1] = 0x60; // 0110 0000; + FraseBit[cont][2] = 0x60; // 0110 0000; + FraseBit[cont][3] = 0x60; // 0110 0000; + FraseBit[cont][4] = 0x60; // 0110 0000; + FraseBit[cont][5] = 0x62; // 0110 0010; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xFE; // 1111 1110; + break; + case 'M': + case 'm': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xEE; // 1110 1110; + FraseBit[cont][2] = 0xD6; // 1101 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'N': + case 'n': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xE6; // 1110 0110; + FraseBit[cont][2] = 0xF6; // 1111 0110; + FraseBit[cont][3] = 0xDE; // 1101 1110; + FraseBit[cont][4] = 0xCE; // 1100 1110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case '¥': + case '¤': + FraseBit[cont][0] = 0x64; // 0110 0100; + FraseBit[cont][1] = 0x98; // 1001 1000; + FraseBit[cont][2] = 0x00; // 0000 0000; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xF6; // 1111 0110; + FraseBit[cont][5] = 0xDE; // 1101 1110; + FraseBit[cont][6] = 0xCE; // 1100 1110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'O': + case 'o': + FraseBit[cont][0] = 0x38; // 0011 1000; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x38; // 0011 1000; + break; + case 'P': + case 'p': + FraseBit[cont][0] = 0xFC; // 1111 1100; + FraseBit[cont][1] = 0x62; // 0110 0010; + FraseBit[cont][2] = 0x62; // 0110 0010; + FraseBit[cont][3] = 0x7C; // 0111 1100; + FraseBit[cont][4] = 0x60; // 0110 0000; + FraseBit[cont][5] = 0x60; // 0110 0000; + FraseBit[cont][6] = 0x60; // 0110 0000; + FraseBit[cont][7] = 0xF0; // 1111 0000; + break; + case 'Q': + case 'q': + FraseBit[cont][0] = 0x00; // 0011 1000; + FraseBit[cont][1] = 0x00; // 1100 0110; + FraseBit[cont][2] = 0x00; // 1100 0110; + FraseBit[cont][3] = 0x00; // 1100 0110; + FraseBit[cont][4] = 0x00; // 1101 0110; + FraseBit[cont][5] = 0x00; // 1101 1110; + FraseBit[cont][6] = 0x00; // 0111 1100; + FraseBit[cont][7] = 0x00; + + FraseBit[cont][0] = 0x38; // 0011 1000; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xCE; // 1100 1110; + FraseBit[cont][6] = 0x38; // 0011 1000; + FraseBit[cont][7] = 0x0E; // 0000 1110; + break; + case 'R': + case 'r': + FraseBit[cont][0] = 0xFC; // 1111 1100; + FraseBit[cont][1] = 0x62; // 0110 0010; + FraseBit[cont][2] = 0x62; // 0110 0010; + FraseBit[cont][3] = 0x7C; // 0111 1100; + FraseBit[cont][4] = 0x6E; // 0110 1110; + FraseBit[cont][5] = 0x66; // 0110 0110; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xE6; // 1110 0110; + break; + case 'S': + case 's': + FraseBit[cont][0] = 0x7C; // 0111 1100; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0x60; // 0110 0000; + FraseBit[cont][3] = 0x18; // 0001 1000; + FraseBit[cont][4] = 0x0C; // 0000 1100; + FraseBit[cont][5] = 0x06; // 0000 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case 'T': + case 't': + FraseBit[cont][0] = 0xFC; // 1111 1100; + FraseBit[cont][1] = 0xB4; // 1011 0100; + FraseBit[cont][2] = 0x30; // 0011 0000; + FraseBit[cont][3] = 0x30; // 0011 0000; + FraseBit[cont][4] = 0x30; // 0011 0000; + FraseBit[cont][5] = 0x30; // 0011 0000; + FraseBit[cont][6] = 0x30; // 0011 0000; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + case 'U': + case 'u': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case 'V': + case 'v': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0x6C; // 0110 1100; + FraseBit[cont][6] = 0x38; // 0011 1000; + FraseBit[cont][7] = 0x10; // 0001 0000; + break; + case 'W': + case 'w': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xD6; // 1101 0110; + FraseBit[cont][5] = 0xD6; // 1101 0110; + FraseBit[cont][6] = 0x7C; // 0111 1100; + FraseBit[cont][7] = 0x28; // 0010 1000; + break; + case 'X': + case 'x': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0x44; // 0100 0100; + FraseBit[cont][2] = 0x6C; // 0110 1100; + FraseBit[cont][3] = 0x38; // 0011 1000; + FraseBit[cont][4] = 0x38; // 0011 1000; + FraseBit[cont][5] = 0x6C; // 0110 1100; + FraseBit[cont][6] = 0x44; // 0100 0100; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'Y': + case 'y': + FraseBit[cont][0] = 0xCC; // 1100 1100; + FraseBit[cont][1] = 0xCC; // 1100 1100; + FraseBit[cont][2] = 0xCC; // 1100 1100; + FraseBit[cont][3] = 0x78; // 0111 1000; + FraseBit[cont][4] = 0x30; // 0011 0000; + FraseBit[cont][5] = 0x30; // 0011 0000; + FraseBit[cont][6] = 0x30; // 0011 0000; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + case 'Z': + case 'z': + FraseBit[cont][0] = 0xFE; // 1111 1110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0x8C; // 1000 1100; + FraseBit[cont][3] = 0x18; // 0001 1000; + FraseBit[cont][4] = 0x30; // 0011 0000; + FraseBit[cont][5] = 0x62; // 0110 0010; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xFE; // 1111 1110; + break; + + case '0': + FraseBit[cont][0] = 0x38; // 0011 1000; + FraseBit[cont][1] = 0xCE; // 1100 1110; + FraseBit[cont][2] = 0xCE; // 1100 1110; + FraseBit[cont][3] = 0xD6; // 1101 0110; + FraseBit[cont][4] = 0xD6; // 1101 0110; + FraseBit[cont][5] = 0xE6; // 1110 0110; + FraseBit[cont][6] = 0xE6; // 1110 0110; + FraseBit[cont][7] = 0x38; // 0011 1000; + break; + case '1': + FraseBit[cont][0] = 0x0C; // 0000 1100; + FraseBit[cont][1] = 0x1C; // 0001 1100; + FraseBit[cont][2] = 0x3C; // 0011 1100; + FraseBit[cont][3] = 0x0C; // 0000 1100; + FraseBit[cont][4] = 0x0C; // 0000 1100; + FraseBit[cont][5] = 0x0C; // 0000 1100; + FraseBit[cont][6] = 0x0C; // 0000 1100; + FraseBit[cont][7] = 0x1E; // 0001 1110; + break; + case '2': + FraseBit[cont][0] = 0x78; // 0111 1000; + FraseBit[cont][1] = 0xCC; // 1100 1100; + FraseBit[cont][2] = 0x06; // 0000 0110; + FraseBit[cont][3] = 0x0C; // 0000 1100; + FraseBit[cont][4] = 0x18; // 0001 1000; + FraseBit[cont][5] = 0x30; // 0011 0000; + FraseBit[cont][6] = 0x60; // 0110 0000; + FraseBit[cont][7] = 0x7E; // 0111 1110; + break; + case '3': + FraseBit[cont][0] = 0x78; // 0111 1000; + FraseBit[cont][1] = 0xCC; // 1100 1100; + FraseBit[cont][2] = 0x06; // 0000 0110; + FraseBit[cont][3] = 0x0C; // 0000 1100; + FraseBit[cont][4] = 0x18; // 0001 1000; + FraseBit[cont][5] = 0x0C; // 0000 1100; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case '4': + FraseBit[cont][0] = 0x0C; // 0000 1100; + FraseBit[cont][1] = 0x1C; // 0001 1100; + FraseBit[cont][2] = 0x2C; // 0010 1100; + FraseBit[cont][3] = 0x4C; // 0100 1100; + FraseBit[cont][4] = 0xFE; // 1111 1110; + FraseBit[cont][5] = 0x0C; // 0000 1100; + FraseBit[cont][6] = 0x0C; // 0000 1100; + FraseBit[cont][7] = 0x1E; // 0001 1110; + break; + case '5': + FraseBit[cont][0] = 0xFE; // 1111 1110; + FraseBit[cont][1] = 0xC0; // 1100 0000; + FraseBit[cont][2] = 0xC0; // 1100 0000; + FraseBit[cont][3] = 0xF8; // 1111 1000; + FraseBit[cont][4] = 0x0C; // 0000 1100; + FraseBit[cont][5] = 0x06; // 0000 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case '6': + FraseBit[cont][0] = 0x3E; // 0011 1110; + FraseBit[cont][1] = 0x60; // 0110 0000; + FraseBit[cont][2] = 0xC0; // 1100 0000; + FraseBit[cont][3] = 0xFC; // 1111 1100; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case '8': + FraseBit[cont][0] = 0x7C; // 0111 1100; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0x7C; // 0111 1100; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case '9': + FraseBit[cont][0] = 0x7C; // 0111 1100; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0x7E; // 0111 1110; + FraseBit[cont][4] = 0x06; // 0000 0110; + FraseBit[cont][5] = 0x06; // 0000 0110; + FraseBit[cont][6] = 0x0C; // 0000 1100; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + + + case '*': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x18; // 0001 1000; + FraseBit[cont][2] = 0x5A; // 0101 1010; + FraseBit[cont][3] = 0x3C; // 0011 1100; + FraseBit[cont][4] = 0x7E; // 0111 1110; + FraseBit[cont][5] = 0x3C; // 0011 1100; + FraseBit[cont][6] = 0x5A; // 0101 1010; + FraseBit[cont][7] = 0x18; // 0001 1000; + break; + case '-': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x00; // 0000 0000; + FraseBit[cont][2] = 0x00; // 0000 0000; + FraseBit[cont][3] = 0xFE; // 1111 1110; + FraseBit[cont][4] = 0xFE; // 1111 1110; + FraseBit[cont][5] = 0x00; // 0000 0000; + FraseBit[cont][6] = 0x00; // 0000 0000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + case '_': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x00; // 0000 0000; + FraseBit[cont][2] = 0x00; // 0000 0000; + FraseBit[cont][3] = 0x00; // 0000 0000; + FraseBit[cont][4] = 0x00; // 0000 0000; + FraseBit[cont][5] = 0x00; // 0000 0000; + FraseBit[cont][6] = 0xFE; // 1111 1110; + FraseBit[cont][7] = 0xFE; // 1111 1110; + break; + case '+': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x18; // 0001 1000; + FraseBit[cont][2] = 0x18; // 0001 1000; + FraseBit[cont][3] = 0xFE; // 1111 1110; + FraseBit[cont][4] = 0xFE; // 1111 1110; + FraseBit[cont][5] = 0x18; // 0001 1000; + FraseBit[cont][6] = 0x18; // 0001 1000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + case '<': + case '(': + FraseBit[cont][0] = 0x18; // 0001 1000; + FraseBit[cont][1] = 0x30; // 0011 0000; + FraseBit[cont][2] = 0x60; // 0110 0000; + FraseBit[cont][3] = 0xC0; // 1100 0000; + FraseBit[cont][4] = 0xC0; // 1100 0000; + FraseBit[cont][5] = 0x60; // 0110 0000; + FraseBit[cont][6] = 0x30; // 0011 0000; + FraseBit[cont][7] = 0x18; // 0001 1000; + break; + case '>': + case ')': + FraseBit[cont][0] = 0x18; // 0001 1000; + FraseBit[cont][1] = 0x0C; // 0000 1100; + FraseBit[cont][2] = 0x06; // 0000 0110; + FraseBit[cont][3] = 0x03; // 0000 0011; + FraseBit[cont][4] = 0x03; // 0000 0011; + FraseBit[cont][5] = 0x06; // 0000 0110; + FraseBit[cont][6] = 0x0C; // 0000 1100; + FraseBit[cont][7] = 0x18; // 0001 1000; + break; + case ':': + case ';': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x30; // 0011 0000; + FraseBit[cont][2] = 0x30; // 0011 0000; + FraseBit[cont][3] = 0x00; // 0000 0000; + FraseBit[cont][4] = 0x00; // 0000 0000; + FraseBit[cont][5] = 0x30; // 0011 0000; + FraseBit[cont][6] = 0x30; // 0011 0000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + case '\'': + FraseBit[cont][0] = 0x0C; // 0000 1100; + FraseBit[cont][1] = 0x0C; // 0000 1100; + FraseBit[cont][2] = 0x0C; // 0000 1100; + FraseBit[cont][3] = 0x10; // 0001 1000; + FraseBit[cont][4] = 0x00; // 0000 0000; + FraseBit[cont][5] = 0x00; // 0000 0000; + FraseBit[cont][6] = 0x00; // 0000 0000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + default: + FraseBit[cont][0] = 0x00; + FraseBit[cont][1] = 0x00; + FraseBit[cont][2] = 0x00; + FraseBit[cont][3] = 0x00; + FraseBit[cont][4] = 0x00; + FraseBit[cont][5] = 0x00; + FraseBit[cont][6] = 0x00; + FraseBit[cont][7] = 0x00; + break; + } + cont++; + Frase_seg++; + } + } else { + // Rotamos la frase + char FrBit_tmp[8]; + // Almacenamos el 1er bit que vamos a perder... + for ( j1=0; j1<8; j1++ ) + FrBit_tmp[j1] = 0x01 & ( FraseBit[0][j1] >> 7 ); + + for ( j=0; j> 7 ) ); + } + for ( j1=0; j1<8; j1++ ) + FraseBit[Flen1-1][j1] = ( FraseBit[Flen1-1][j1] & 0xFE ) | FrBit_tmp[j1]; + } + +// . . . . . . +// .ï ï. .ï ï. .ï ï. +// . . . . . +// __________.________________________.______________________.______________ +// . . . . . . +// . . . . . . +// ' .. ' ' .. ' ' .. ' +// +// . . +// . ï ï . +// . . +// ____________________._____________________.______________________________ +// . . ` ï +// . . ` ï +// . . ` ï +// . . . ` ï +// ` . . ï +// ndigitos --> m x. = 40 + float i1; + for ( i=0, i1=3; i < FA->ndigitos; i ++ ) + { + for ( j=0, j1=0; j1<8; j+=2*FA->AX, j1++ ) + { + // Analizamos el patron de BIT's y lo imprimimos + // FraseBit[cont][0] + // ^ ^----- N£mero de byte del digito ( 8x8 ) + // |_________ N£mero de digito alfa-numerico + for ( bit_s = 0; bit_s < 8; bit_s++, i1+=.003 ) + { + + if ( FraseBit[i][bit_s] & ( (char)0x01 << (7-j1) ) ) c_elec = FA->C2; else c_elec = FA->C1; + putpixel ( FA->x + j + bit_s*2+ i*8*2*FA->AX, FA->y + sin( i1 )*70 + 2*bit_s*FA->AY, c_elec ); + } + } + } +} diff --git a/FREC/R.BAT b/FREC/R.BAT new file mode 100644 index 0000000..ac856b8 --- /dev/null +++ b/FREC/R.BAT @@ -0,0 +1 @@ +edit frec.img diff --git a/Frec2.arj b/Frec2.arj new file mode 100644 index 0000000..e9dfc7b Binary files /dev/null and b/Frec2.arj differ diff --git a/LITT.CHR b/LITT.CHR new file mode 100644 index 0000000..08c3067 Binary files /dev/null and b/LITT.CHR differ diff --git a/NUMERO.CPP b/NUMERO.CPP new file mode 100644 index 0000000..85263b2 --- /dev/null +++ b/NUMERO.CPP @@ -0,0 +1,2130 @@ +#include +#include +#include +#include +/////////////////////////////////// +#include +/////////////////////////////////// +#include + +// #define 0± e +// #define ÿ 0 +// ^ Caracter 255 + int TabS[255]; + + +typedef struct + { + int x, y; + char ndigitos; + char AX, AY; + char C1, C2, C3; + } p_graphics; + +int Numero_Digital( long numero, p_graphics *ND ); +void Fuente_Amplia( char *Frase, p_graphics *FA ); +void Fuente_Amplia2( char *Frase, p_graphics *FA ); + +int Numero_Digital( long numero, p_graphics *ND ) +{ +// Son 9 digitos VARIABLES +// 0 +// _________ _________ _________ _________ _________ _________ _________ +// |\______ /| |\______ /| |\______ /| |\______ /| |\______ /| |\______ /| |\______ /| +// | | | | | | | | | | | | | | | | | | | | | | | | | | | | +//3 | | 1 | | 5 | | | | | | | | | | | | | | | | | | | | | | | | +// | /-----\ | | /-----\ | | /-----\ | | /-----\ | | /-----\ | | /-----\ | | /-----\ | +// | \-----/ | | \-----/ | | \-----/ | | \-----/ | | \-----/ | | \-----/ | | \-----/ | +//4 | | | | 6 | | | | | | | | | | | | | | | | | | | | | | | | +// | |_____| | | |_____| | | |_____| | | |_____| | | |_____| | | |_____| | | |_____| | +// |/_______\| |/_______\| |/_______\| |/_______\| |/_______\| |/_______\| |/_______\| +// 2 + + static char dnumero[9] = { -1, -1, -1, -1, -1, -1, -1, -1, -1 }; + static char Dn[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + static ndigitos1 = -1; + static char vez = 0; + static p_graphics ND1; + + if ( + ND1.x != ND -> x || ND1.y != ND -> y || + ND1.ndigitos != ND -> ndigitos || + ND1.AX != ND -> AX || ND1.AY != ND -> AY + /*ndigitos1 != ndigitos*/ + ) { dnumero[0] = -1; dnumero[1] = -1; dnumero[2] = -1; + dnumero[3] = -1; dnumero[4] = -1; dnumero[5] = -1; + dnumero[6] = -1; dnumero[7] = -1; dnumero[8] = -1; + Dn[0] = 0; Dn[1] = 0; Dn[2] = 0; + Dn[3] = 0; Dn[4] = 0; Dn[5] = 0; + Dn[6] = 0; Dn[7] = 0; Dn[8] = 0; + //ndigitos1 = ndigitos; + ND1 = *ND; + vez = 0; + } + // { 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F }; + + char dnum=0, i, j, digital; + int punto[10]; + int CONST = 0; + char DnTmp[2]; + char signo = 0; + static old_signo = 0; +// ndigitos - 1 +// if ( numero > 999999 || numero < -99999 ) return -1; +// 1000000 + + + if ( numero < 0 ) { numero *= -1; + signo = 1; + } + if ( signo != old_signo ) vez = 0; + + setcolor(ND -> C3); + +// char old_dnum; + + for( i=0; i < ND -> ndigitos; i++ ) + { + // old_dnum = dnum; + dnum = numero % 10; + digital = numero; + numero /= 10; + + if ( dnumero[ ND -> ndigitos - 1 - i] != dnum || digital == 0 || vez == 0 ) + { + // digital = dnumero[5 - i]; + dnumero[ND -> ndigitos - 1 - i] = dnum; + //////// Esta parte del c¢digo imprime el digito en pantalla + CONST = 12*ND -> AX*(ND -> ndigitos - 1 - i); + DnTmp[1] = Dn[ND -> ndigitos - 1 -i]; +// if ( i == 5 && signo == 1 ) Dn[5-i] = 2; else + // Antes de nada, eliminamos los cero a la izquierda + if ( digital == 0 && i != 0 ) { Dn[ND -> ndigitos - 1 -i] = 0; dnumero[ND -> ndigitos - 1 - i] = -1; } else + switch( dnum ) + { + case 0: + Dn[ND -> ndigitos - 1 -i] = 0x7D; // 0111 1101 + break; + case 1: + Dn[ND -> ndigitos - 1 -i] = 0x60; // 0110 0000 + break; + case 2: + Dn[ND -> ndigitos - 1 -i] = 0x37; // 0011 0111 + break; + case 3: + Dn[ND -> ndigitos - 1 -i] = 0x67; // 0110 0111 + break; + case 4: + Dn[ND -> ndigitos - 1 -i] = 0x6A; // 0110 1010 + break; + case 5: + Dn[ND -> ndigitos - 1 -i] = 0x4F; // 0100 1111 + break; + case 6: + Dn[ND -> ndigitos - 1 -i] = 0x5F; // 0101 1111 + break; + case 7: + Dn[ND -> ndigitos - 1 -i] = 0x61; // 0110 0001 + break; + case 8: + Dn[ND -> ndigitos - 1 -i] = 0x7F; // 0111 1111 + break; + case 9: + Dn[ND -> ndigitos - 1 -i] = 0x6F; // 0110 1111 + break; + } + + DnTmp[0] = Dn[ND -> ndigitos - 1 -i]; + for( j=0; j<7; j++ ) + { + if ( DnTmp[1]%2 != DnTmp[0]%2 || vez == 0 ) + { + if ( DnTmp[0]%2 ) + setfillstyle(SOLID_FILL, ND -> C1); + else + setfillstyle(SOLID_FILL, ND -> C2); + + switch( j ) + { + case 0: + punto[0] = 0*ND -> AX + CONST + ND -> x; punto[1] = 0*ND -> AY + ND -> y; + punto[2] = 10*ND -> AX + CONST + ND -> x; punto[3] = 0*ND -> AY + ND -> y; + punto[4] = 8*ND -> AX + CONST + ND -> x; punto[5] = 2*ND -> AY + ND -> y; + punto[6] = 2*ND -> AX + CONST + ND -> x; punto[7] = 2*ND -> AY + ND -> y; + punto[8] = 0*ND -> AX + CONST + ND -> x; punto[9] = 0*ND -> AY + ND -> y; + fillpoly( 5, punto ); + break; + case 3: + punto[0] = 0*ND -> AX + CONST + ND -> x; punto[1] = 0*ND -> AY + ND -> y; + punto[2] = 2*ND -> AX + CONST + ND -> x; punto[3] = 2*ND -> AY + ND -> y; + punto[4] = 2*ND -> AX + CONST + ND -> x; punto[5] = 9*ND -> AY + ND -> y; + punto[6] = 1*ND -> AX + CONST + ND -> x; punto[7] = 10*ND -> AY + ND -> y; + punto[8] = 0*ND -> AX + CONST + ND -> x; punto[9] = 9*ND -> AY + ND -> y; + fillpoly( 5, punto ); + break; + case 5: + punto[0] = 10*ND -> AX + CONST + ND -> x; punto[1] = 0*ND -> AY + ND -> y; + punto[2] = 10*ND -> AX + CONST + ND -> x; punto[3] = 9*ND -> AY + ND -> y; + punto[4] = 9*ND -> AX + CONST + ND -> x; punto[5] = 10*ND -> AY + ND -> y; + punto[6] = 8*ND -> AX + CONST + ND -> x; punto[7] = 9*ND -> AY + ND -> y; + punto[8] = 8*ND -> AX + CONST + ND -> x; punto[9] = 2*ND -> AY + ND -> y; + fillpoly( 5, punto ); + break; + case 1: + int punto1[12]; + punto1[0] = 1*ND -> AX + CONST + ND -> x; punto1[1] = 10*ND -> AY + ND -> y; + punto1[2] = 2*ND -> AX + CONST + ND -> x; punto1[3] = 9*ND -> AY + ND -> y; + punto1[4] = 8*ND -> AX + CONST + ND -> x; punto1[5] = 9*ND -> AY + ND -> y; + punto1[6] = 9*ND -> AX + CONST + ND -> x; punto1[7] = 10*ND -> AY + ND -> y; + punto1[8] = 8*ND -> AX + CONST + ND -> x; punto1[9] = 11*ND -> AY + ND -> y; + punto1[10] = 2*ND -> AX + CONST + ND -> x; punto1[11] = 11*ND -> AY +ND -> y; + fillpoly( 6, punto1 ); + break; + case 4: + punto[0] = 1*ND -> AX + CONST + ND -> x; punto[1] = 10*ND -> AY + ND -> y; + punto[2] = 2*ND -> AX + CONST + ND -> x; punto[3] = 11*ND -> AY + ND -> y; + punto[4] = 2*ND -> AX + CONST + ND -> x; punto[5] = 18*ND -> AY + ND -> y; + punto[6] = 0*ND -> AX + CONST + ND -> x; punto[7] = 20*ND -> AY + ND -> y; + punto[8] = 0*ND -> AX + CONST + ND -> x; punto[9] = 11*ND -> AY + ND -> y; + fillpoly( 5, punto ); + break; + case 6: + punto[0] = 9*ND -> AX + CONST + ND -> x; punto[1] = 10*ND -> AY + ND -> y; + punto[2] = 10*ND -> AX + CONST + ND -> x; punto[3] = 11*ND -> AY + ND -> y; + punto[4] = 10*ND -> AX + CONST + ND -> x; punto[5] = 20*ND -> AY + ND -> y; + punto[6] = 8*ND -> AX + CONST + ND -> x; punto[7] = 18*ND -> AY + ND -> y; + punto[8] = 8*ND -> AX + CONST + ND -> x; punto[9] = 11*ND -> AY + ND -> y; + fillpoly( 5, punto ); + break; + case 2: + punto[0] = 2*ND -> AX + CONST + ND -> x; punto[1] = 18*ND -> AY + ND -> y; + punto[2] = 8*ND -> AX + CONST + ND -> x; punto[3] = 18*ND -> AY + ND -> y; + punto[4] = 10*ND -> AX + CONST + ND -> x; punto[5] = 20*ND -> AY + ND -> y; + punto[6] = 0*ND -> AX + CONST + ND -> x; punto[7] = 20*ND -> AY + ND -> y; + punto[8] = 2*ND -> AX + CONST + ND -> x; punto[9] = 18*ND -> AY + ND -> y; + fillpoly( 5, punto ); + break; + default: + break; + } + } + DnTmp[0] /= 2; + DnTmp[1] /= 2; + } + } + } + + if ( signo != old_signo ) + { + + if ( (old_signo = signo) == 1 ) + { + setfillstyle(SOLID_FILL, ND -> C1); + + int punto1[12]; + punto1[0] = 1*ND -> AX + ND -> x; punto1[1] = 10*ND -> AY + ND -> y; + punto1[2] = 2*ND -> AX + ND -> x; punto1[3] = 9*ND -> AY + ND -> y; + punto1[4] = 8*ND -> AX + ND -> x; punto1[5] = 9*ND -> AY + ND -> y; + punto1[6] = 9*ND -> AX + ND -> x; punto1[7] = 10*ND -> AY + ND -> y; + punto1[8] = 8*ND -> AX + ND -> x; punto1[9] = 11*ND -> AY + ND -> y; + punto1[10] = 2*ND -> AX + ND -> x; punto1[11] = 11*ND -> AY +ND -> y; + fillpoly( 6, punto1 ); + } + } + + vez = 1; + return 0; +} + + + + + + + + + + +void Fuente_Amplia( char *Frase, p_graphics *FA ) +{ +// C A R T E L D I G I T A L +//*// ( 27 ) - 2 ===> 25 [ Fuente de 8x8 ] +//* ^___ El tama¤o ha sido reoptimizado para que sea variable seg£n las +//* necesidades de cada programador. ( cuando AX = AY = 1 --> T^ ) +//* ........ . . . o . . . . o o o o o o . . +//* ........ . . o . o . . . . o . . . . o . +//* ........ . o . . . o . . . o . . . . o . +//* ........ o . . . . . o . . o o o o o . . +//* ........ o o o o o o o . . o . . . . o . +//* ........ o . . . . . o . . o . . . . o . +//* ........ o . . . . . o . . o . . . o . . +//* ........ o . . . . . o . o o o o o . . . +//* +int i; +char j, j1; + + +static char FraseBit[110][8]; +static char Frase1[100]; + +static unsigned int loop; +static unsigned int Flen; + char c_elec; + char bit_s; + char *Frase_seg; +static char Flen1; + Frase_seg = Frase1; + +if ( strcmp( Frase1, Frase ) != 0 ) + { + strncpy( Frase1, Frase, 99 ); + Frase1[99] = '\0'; + j = i = strlen( Frase ); + Flen = i * 8; + char cont = 0; + + if ( i < FA -> ndigitos ) + i += FA -> ndigitos - i; + else + i += 5; + + Flen1 = i; + + // Almacenamos en la Frase a Bit's la FRASE A BIT'S + while( cont <= i ) + { + // Descomponemos cada caracter en un patron de BIT's + if ( (cont - j) > 0 ) + { + FraseBit[cont][0] = 0x00; + FraseBit[cont][1] = 0x00; + FraseBit[cont][2] = 0x00; + FraseBit[cont][3] = 0x00; + FraseBit[cont][4] = 0x00; + FraseBit[cont][5] = 0x00; + FraseBit[cont][6] = 0x00; + FraseBit[cont][7] = 0x00; + } else + switch( *Frase_seg ) + { + case 'A': + case 'a': + FraseBit[cont][0] = 0x10; // 0001 0000; + FraseBit[cont][1] = 0x38; // 0011 1000; + FraseBit[cont][2] = 0x6C; // 0110 1100; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xFE; // 1111 1110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'B': + case 'b': + FraseBit[cont][0] = 0xFC; // 1111 1100; + FraseBit[cont][1] = 0x66; // 0110 0110; + FraseBit[cont][2] = 0x6C; // 0110 1100; + FraseBit[cont][3] = 0x78; // 0111 1000; + FraseBit[cont][4] = 0x6C; // 0110 1100; + FraseBit[cont][5] = 0x66; // 0110 0110; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xFC; // 1111 1100; + break; + case 'C': + case 'c': + FraseBit[cont][0] = 0x78; // 0111 1000; + FraseBit[cont][1] = 0xCC; // 1100 1100; + FraseBit[cont][2] = 0xC0; // 1100 0000; + FraseBit[cont][3] = 0xC0; // 1100 0000; + FraseBit[cont][4] = 0xC0; // 1100 0000; + FraseBit[cont][5] = 0xC0; // 1100 0000; + FraseBit[cont][6] = 0xCC; // 1100 1100; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + case 'D': + case 'd': + FraseBit[cont][0] = 0xF8; // 1111 1000; + FraseBit[cont][1] = 0x6C; // 0110 1100; + FraseBit[cont][2] = 0x66; // 0110 0110; + FraseBit[cont][3] = 0x66; // 0110 0110; + FraseBit[cont][4] = 0x66; // 0110 0110; + FraseBit[cont][5] = 0x66; // 0110 0110; + FraseBit[cont][6] = 0x6C; // 0110 1100; + FraseBit[cont][7] = 0xF8; // 1111 1000; + break; + case 'E': + case 'e': + FraseBit[cont][0] = 0xFE; // 1111 1110; + FraseBit[cont][1] = 0x66; // 0110 0110; + FraseBit[cont][2] = 0x62; // 0110 0010; + FraseBit[cont][3] = 0x68; // 0110 1000; + FraseBit[cont][4] = 0x78; // 0111 1000; + FraseBit[cont][5] = 0x68; // 0110 1010; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xFE; // 1111 1110; + break; + case 'F': + case 'f': + FraseBit[cont][0] = 0xFE; // 1111 1110; + FraseBit[cont][1] = 0x66; // 0110 0110; + FraseBit[cont][2] = 0x62; // 0110 0010; + FraseBit[cont][3] = 0x68; // 0110 1000; + FraseBit[cont][4] = 0x78; // 0111 1000; + FraseBit[cont][5] = 0x68; // 0110 1000; + FraseBit[cont][6] = 0x60; // 0110 0000; + FraseBit[cont][7] = 0xF0; // 1111 0000; + break; + case 'G': + case 'g': + FraseBit[cont][0] = 0x7C; // 0111 1100; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC2; // 1100 0010; + FraseBit[cont][3] = 0xC0; // 1100 0000; + FraseBit[cont][4] = 0xDE; // 1101 1110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0x3A; // 0011 1010; + break; + case 'H': + case 'h': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xFE; // 1111 1110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'I': + case 'i': + FraseBit[cont][0] = 0x7E; // 0111 1110; + FraseBit[cont][1] = 0x18; // 0001 1000; + FraseBit[cont][2] = 0x18; // 0001 1000; + FraseBit[cont][3] = 0x18; // 0001 1000; + FraseBit[cont][4] = 0x18; // 0001 1000; + FraseBit[cont][5] = 0x18; // 0001 1000; + FraseBit[cont][6] = 0x18; // 0001 1000; + FraseBit[cont][7] = 0x7E; // 0111 1110; + break; + case 'J': + case 'j': + FraseBit[cont][0] = 0x1E; // 0001 1110; + FraseBit[cont][1] = 0x0C; // 0000 1100; + FraseBit[cont][2] = 0x0C; // 0000 1100; + FraseBit[cont][3] = 0x0C; // 0000 1100; + FraseBit[cont][4] = 0x0C; // 0000 1100; + FraseBit[cont][5] = 0xCC; // 1100 1100; + FraseBit[cont][6] = 0xCC; // 1100 1100; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + case 'K': + case 'k': + FraseBit[cont][0] = 0xE6; // 1110 0110; + FraseBit[cont][1] = 0x66; // 0110 0110; + FraseBit[cont][2] = 0x6C; // 0110 1100; + FraseBit[cont][3] = 0x78; // 0111 1000; + FraseBit[cont][4] = 0x6C; // 0110 1100; + FraseBit[cont][5] = 0x66; // 0110 0110; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xE6; // 1110 0110; + break; + case 'L': + case 'l': + FraseBit[cont][0] = 0xF0; // 1111 0000; + FraseBit[cont][1] = 0x60; // 0110 0000; + FraseBit[cont][2] = 0x60; // 0110 0000; + FraseBit[cont][3] = 0x60; // 0110 0000; + FraseBit[cont][4] = 0x60; // 0110 0000; + FraseBit[cont][5] = 0x62; // 0110 0010; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xFE; // 1111 1110; + break; + case 'M': + case 'm': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xEE; // 1110 1110; + FraseBit[cont][2] = 0xD6; // 1101 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'N': + case 'n': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xE6; // 1110 0110; + FraseBit[cont][2] = 0xF6; // 1111 0110; + FraseBit[cont][3] = 0xDE; // 1101 1110; + FraseBit[cont][4] = 0xCE; // 1100 1110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case '¥': + case '¤': + FraseBit[cont][0] = 0x64; // 0110 0100; + FraseBit[cont][1] = 0x98; // 1001 1000; + FraseBit[cont][2] = 0x00; // 0000 0000; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xF6; // 1111 0110; + FraseBit[cont][5] = 0xDE; // 1101 1110; + FraseBit[cont][6] = 0xCE; // 1100 1110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'O': + case 'o': + FraseBit[cont][0] = 0x38; // 0011 1000; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x38; // 0011 1000; + break; + case 'P': + case 'p': + FraseBit[cont][0] = 0xFC; // 1111 1100; + FraseBit[cont][1] = 0x62; // 0110 0010; + FraseBit[cont][2] = 0x62; // 0110 0010; + FraseBit[cont][3] = 0x7C; // 0111 1100; + FraseBit[cont][4] = 0x60; // 0110 0000; + FraseBit[cont][5] = 0x60; // 0110 0000; + FraseBit[cont][6] = 0x60; // 0110 0000; + FraseBit[cont][7] = 0xF0; // 1111 0000; + break; + case 'Q': + case 'q': + FraseBit[cont][0] = 0x00; // 0011 1000; + FraseBit[cont][1] = 0x00; // 1100 0110; + FraseBit[cont][2] = 0x00; // 1100 0110; + FraseBit[cont][3] = 0x00; // 1100 0110; + FraseBit[cont][4] = 0x00; // 1101 0110; + FraseBit[cont][5] = 0x00; // 1101 1110; + FraseBit[cont][6] = 0x00; // 0111 1100; + FraseBit[cont][7] = 0x00; + + FraseBit[cont][0] = 0x38; // 0011 1000; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xCE; // 1100 1110; + FraseBit[cont][6] = 0x38; // 0011 1000; + FraseBit[cont][7] = 0x0E; // 0000 1110; + break; + case 'R': + case 'r': + FraseBit[cont][0] = 0xFC; // 1111 1100; + FraseBit[cont][1] = 0x62; // 0110 0010; + FraseBit[cont][2] = 0x62; // 0110 0010; + FraseBit[cont][3] = 0x7C; // 0111 1100; + FraseBit[cont][4] = 0x6E; // 0110 1110; + FraseBit[cont][5] = 0x66; // 0110 0110; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xE6; // 1110 0110; + break; + case 'S': + case 's': + FraseBit[cont][0] = 0x7C; // 0111 1100; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0x60; // 0110 0000; + FraseBit[cont][3] = 0x18; // 0001 1000; + FraseBit[cont][4] = 0x0C; // 0000 1100; + FraseBit[cont][5] = 0x06; // 0000 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case 'T': + case 't': + FraseBit[cont][0] = 0xFC; // 1111 1100; + FraseBit[cont][1] = 0xB4; // 1011 0100; + FraseBit[cont][2] = 0x30; // 0011 0000; + FraseBit[cont][3] = 0x30; // 0011 0000; + FraseBit[cont][4] = 0x30; // 0011 0000; + FraseBit[cont][5] = 0x30; // 0011 0000; + FraseBit[cont][6] = 0x30; // 0011 0000; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + case 'U': + case 'u': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case 'V': + case 'v': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0x6C; // 0110 1100; + FraseBit[cont][6] = 0x38; // 0011 1000; + FraseBit[cont][7] = 0x10; // 0001 0000; + break; + case 'W': + case 'w': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xD6; // 1101 0110; + FraseBit[cont][5] = 0xD6; // 1101 0110; + FraseBit[cont][6] = 0x7C; // 0111 1100; + FraseBit[cont][7] = 0x28; // 0010 1000; + break; + case 'X': + case 'x': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0x44; // 0100 0100; + FraseBit[cont][2] = 0x6C; // 0110 1100; + FraseBit[cont][3] = 0x38; // 0011 1000; + FraseBit[cont][4] = 0x38; // 0011 1000; + FraseBit[cont][5] = 0x6C; // 0110 1100; + FraseBit[cont][6] = 0x44; // 0100 0100; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'Y': + case 'y': + FraseBit[cont][0] = 0xCC; // 1100 1100; + FraseBit[cont][1] = 0xCC; // 1100 1100; + FraseBit[cont][2] = 0xCC; // 1100 1100; + FraseBit[cont][3] = 0x78; // 0111 1000; + FraseBit[cont][4] = 0x30; // 0011 0000; + FraseBit[cont][5] = 0x30; // 0011 0000; + FraseBit[cont][6] = 0x30; // 0011 0000; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + case 'Z': + case 'z': + FraseBit[cont][0] = 0xFE; // 1111 1110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0x8C; // 1000 1100; + FraseBit[cont][3] = 0x18; // 0001 1000; + FraseBit[cont][4] = 0x30; // 0011 0000; + FraseBit[cont][5] = 0x62; // 0110 0010; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xFE; // 1111 1110; + break; + + case '0': + FraseBit[cont][0] = 0x38; // 0011 1000; + FraseBit[cont][1] = 0xCE; // 1100 1110; + FraseBit[cont][2] = 0xCE; // 1100 1110; + FraseBit[cont][3] = 0xD6; // 1101 0110; + FraseBit[cont][4] = 0xD6; // 1101 0110; + FraseBit[cont][5] = 0xE6; // 1110 0110; + FraseBit[cont][6] = 0xE6; // 1110 0110; + FraseBit[cont][7] = 0x38; // 0011 1000; + break; + case '1': + FraseBit[cont][0] = 0x0C; // 0000 1100; + FraseBit[cont][1] = 0x1C; // 0001 1100; + FraseBit[cont][2] = 0x3C; // 0011 1100; + FraseBit[cont][3] = 0x0C; // 0000 1100; + FraseBit[cont][4] = 0x0C; // 0000 1100; + FraseBit[cont][5] = 0x0C; // 0000 1100; + FraseBit[cont][6] = 0x0C; // 0000 1100; + FraseBit[cont][7] = 0x1E; // 0001 1110; + break; + case '2': + FraseBit[cont][0] = 0x78; // 0111 1000; + FraseBit[cont][1] = 0xCC; // 1100 1100; + FraseBit[cont][2] = 0x06; // 0000 0110; + FraseBit[cont][3] = 0x0C; // 0000 1100; + FraseBit[cont][4] = 0x18; // 0001 1000; + FraseBit[cont][5] = 0x30; // 0011 0000; + FraseBit[cont][6] = 0x60; // 0110 0000; + FraseBit[cont][7] = 0x7E; // 0111 1110; + break; + case '3': + FraseBit[cont][0] = 0x78; // 0111 1000; + FraseBit[cont][1] = 0xCC; // 1100 1100; + FraseBit[cont][2] = 0x06; // 0000 0110; + FraseBit[cont][3] = 0x0C; // 0000 1100; + FraseBit[cont][4] = 0x18; // 0001 1000; + FraseBit[cont][5] = 0x0C; // 0000 1100; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case '4': + FraseBit[cont][0] = 0x0C; // 0000 1100; + FraseBit[cont][1] = 0x1C; // 0001 1100; + FraseBit[cont][2] = 0x2C; // 0010 1100; + FraseBit[cont][3] = 0x4C; // 0100 1100; + FraseBit[cont][4] = 0xFE; // 1111 1110; + FraseBit[cont][5] = 0x0C; // 0000 1100; + FraseBit[cont][6] = 0x0C; // 0000 1100; + FraseBit[cont][7] = 0x1E; // 0001 1110; + break; + case '5': + FraseBit[cont][0] = 0xFE; // 1111 1110; + FraseBit[cont][1] = 0xC0; // 1100 0000; + FraseBit[cont][2] = 0xC0; // 1100 0000; + FraseBit[cont][3] = 0xF8; // 1111 1000; + FraseBit[cont][4] = 0x0C; // 0000 1100; + FraseBit[cont][5] = 0x06; // 0000 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case '6': + FraseBit[cont][0] = 0x3E; // 0011 1110; + FraseBit[cont][1] = 0x60; // 0110 0000; + FraseBit[cont][2] = 0xC0; // 1100 0000; + FraseBit[cont][3] = 0xFC; // 1111 1100; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case '8': + FraseBit[cont][0] = 0x7C; // 0111 1100; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0x7C; // 0111 1100; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case '9': + FraseBit[cont][0] = 0x7C; // 0111 1100; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0x7E; // 0111 1110; + FraseBit[cont][4] = 0x06; // 0000 0110; + FraseBit[cont][5] = 0x06; // 0000 0110; + FraseBit[cont][6] = 0x0C; // 0000 1100; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + + case '*': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x18; // 0001 1000; + FraseBit[cont][2] = 0x5A; // 0101 1010; + FraseBit[cont][3] = 0x3C; // 0011 1100; + FraseBit[cont][4] = 0x7E; // 0111 1110; + FraseBit[cont][5] = 0x3C; // 0011 1100; + FraseBit[cont][6] = 0x5A; // 0101 1010; + FraseBit[cont][7] = 0x18; // 0001 1000; + break; + case '-': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x00; // 0000 0000; + FraseBit[cont][2] = 0x00; // 0000 0000; + FraseBit[cont][3] = 0xFE; // 1111 1110; + FraseBit[cont][4] = 0xFE; // 1111 1110; + FraseBit[cont][5] = 0x00; // 0000 0000; + FraseBit[cont][6] = 0x00; // 0000 0000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + case '_': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x00; // 0000 0000; + FraseBit[cont][2] = 0x00; // 0000 0000; + FraseBit[cont][3] = 0x00; // 0000 0000; + FraseBit[cont][4] = 0x00; // 0000 0000; + FraseBit[cont][5] = 0x00; // 0000 0000; + FraseBit[cont][6] = 0xFE; // 1111 1110; + FraseBit[cont][7] = 0xFE; // 1111 1110; + break; + case '+': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x18; // 0001 1000; + FraseBit[cont][2] = 0x18; // 0001 1000; + FraseBit[cont][3] = 0xFE; // 1111 1110; + FraseBit[cont][4] = 0xFE; // 1111 1110; + FraseBit[cont][5] = 0x18; // 0001 1000; + FraseBit[cont][6] = 0x18; // 0001 1000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + case '<': + case '(': + FraseBit[cont][0] = 0x18; // 0001 1000; + FraseBit[cont][1] = 0x30; // 0011 0000; + FraseBit[cont][2] = 0x60; // 0110 0000; + FraseBit[cont][3] = 0xC0; // 1100 0000; + FraseBit[cont][4] = 0xC0; // 1100 0000; + FraseBit[cont][5] = 0x60; // 0110 0000; + FraseBit[cont][6] = 0x30; // 0011 0000; + FraseBit[cont][7] = 0x18; // 0001 1000; + break; + case '>': + case ')': + FraseBit[cont][0] = 0x18; // 0001 1000; + FraseBit[cont][1] = 0x0C; // 0000 1100; + FraseBit[cont][2] = 0x06; // 0000 0110; + FraseBit[cont][3] = 0x03; // 0000 0011; + FraseBit[cont][4] = 0x03; // 0000 0011; + FraseBit[cont][5] = 0x06; // 0000 0110; + FraseBit[cont][6] = 0x0C; // 0000 1100; + FraseBit[cont][7] = 0x18; // 0001 1000; + break; + case ':': + case ';': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x30; // 0011 0000; + FraseBit[cont][2] = 0x30; // 0011 0000; + FraseBit[cont][3] = 0x00; // 0000 0000; + FraseBit[cont][4] = 0x00; // 0000 0000; + FraseBit[cont][5] = 0x30; // 0011 0000; + FraseBit[cont][6] = 0x30; // 0011 0000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + case '\'': + FraseBit[cont][0] = 0x0C; // 0000 1100; + FraseBit[cont][1] = 0x0C; // 0000 1100; + FraseBit[cont][2] = 0x0C; // 0000 1100; + FraseBit[cont][3] = 0x10; // 0001 1000; + FraseBit[cont][4] = 0x00; // 0000 0000; + FraseBit[cont][5] = 0x00; // 0000 0000; + FraseBit[cont][6] = 0x00; // 0000 0000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + case '\\': + FraseBit[cont][0] = 0xD0; // 1100 0000; + FraseBit[cont][1] = 0x60; // 0110 0000; + FraseBit[cont][2] = 0x30; // 0011 0000; + FraseBit[cont][3] = 0x18; // 0001 1000; + FraseBit[cont][4] = 0x0D; // 0000 1100; + FraseBit[cont][5] = 0x06; // 0000 0110; + FraseBit[cont][6] = 0x03; // 0000 0011; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + case '/': + FraseBit[cont][0] = 0x03; // 0000 0011; + FraseBit[cont][1] = 0x06; // 0000 0110; + FraseBit[cont][2] = 0x0D; // 0000 1100; + FraseBit[cont][3] = 0x18; // 0001 1000; + FraseBit[cont][4] = 0x30; // 0011 0000; + FraseBit[cont][5] = 0x60; // 0110 0000; + FraseBit[cont][6] = 0xD0; // 1100 0000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + case '|': + FraseBit[cont][0] = 0x18; // 0001 1000; + FraseBit[cont][1] = 0x18; // 0001 1000; + FraseBit[cont][2] = 0x18; // 0001 1000; + FraseBit[cont][3] = 0x18; // 0001 1000; + FraseBit[cont][4] = 0x18; // 0001 1000; + FraseBit[cont][5] = 0x18; // 0001 1000; + FraseBit[cont][6] = 0x18; // 0001 1000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + default: + FraseBit[cont][0] = 0x00; + FraseBit[cont][1] = 0x00; + FraseBit[cont][2] = 0x00; + FraseBit[cont][3] = 0x00; + FraseBit[cont][4] = 0x00; + FraseBit[cont][5] = 0x00; + FraseBit[cont][6] = 0x00; + FraseBit[cont][7] = 0x00; + break; + } + cont++; + Frase_seg++; + } + } else { + // Rotamos la frase + char FrBit_tmp[8]; + // Almacenamos el 1er bit que vamos a perder... + for ( j1=0; j1<8; j1++ ) + FrBit_tmp[j1] = 0x01 & ( FraseBit[0][j1] >> 7 ); + + for ( j=0; j> 7 ) ); + } + for ( j1=0; j1<8; j1++ ) + FraseBit[Flen1-1][j1] = ( FraseBit[Flen1-1][j1] & 0xFE ) | FrBit_tmp[j1]; + } + +// ndigitos --> m x. = 40 + for ( i=0; i < FA->ndigitos; i ++ ) + { + for ( j=0, j1=0; j1<8; j+=2*FA->AX, j1++ ) + { + // Analizamos el patron de BIT's y lo imprimimos + // FraseBit[cont][0] + // ^ ^----- N£mero de byte del digito ( 8x8 ) + // |_________ N£mero de digito alfa-numerico + for ( bit_s = 0; bit_s < 8; bit_s++ ) + { + if ( FraseBit[i][bit_s] & ( (char)0x01 << (7-j1) ) ) c_elec = FA->C2; else c_elec = FA->C1; + putpixel ( FA->x + j + i*8*2*FA->AX, FA->y + 2*bit_s*FA->AY, c_elec ); + } + } + } +} +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +void Fuente_Amplia2( char *Frase, p_graphics *FA ) +{ +// C A R T E L D I G I T A L +//*// ( 27 ) - 2 ===> 25 [ Fuente de 8x8 ] +//* ^___ El tama¤o ha sido reoptimizado para que sea variable seg£n las +//* necesidades de cada programador. ( cuando AX = AY = 1 --> T^ ) +//* ........ . . . o . . . . o o o o o o . . +//* ........ . . o . o . . . . o . . . . o . +//* ........ . o . . . o . . . o . . . . o . +//* ........ o . . . . . o . . o o o o o . . +//* ........ o o o o o o o . . o . . . . o . +//* ........ o . . . . . o . . o . . . . o . +//* ........ o . . . . . o . . o . . . o . . +//* ........ o . . . . . o . o o o o o . . . +//* +int i; +char j, j1; + + +static char FraseBit[110][8]; +static char Frase1[100]; + +static unsigned int loop; +static unsigned int Flen; + char c_elec; + char bit_s; + char *Frase_seg; +static char Flen1; + Frase_seg = Frase1; + +if ( strcmp( Frase1, Frase ) != 0 ) + { + strncpy( Frase1, Frase, 99 ); + Frase1[99] = '\0'; + j = i = strlen( Frase ); + Flen = i * 8; + char cont = 0; + + if ( i < FA -> ndigitos ) + i += FA -> ndigitos - i; + else + i += 5; + + Flen1 = i; + + // Almacenamos en la Frase a Bit's la FRASE A BIT'S + while( cont <= i ) + { + // Descomponemos cada caracter en un patron de BIT's + if ( (cont - j) > 0 ) + { + FraseBit[cont][0] = 0x00; + FraseBit[cont][1] = 0x00; + FraseBit[cont][2] = 0x00; + FraseBit[cont][3] = 0x00; + FraseBit[cont][4] = 0x00; + FraseBit[cont][5] = 0x00; + FraseBit[cont][6] = 0x00; + FraseBit[cont][7] = 0x00; + } else + switch( *Frase_seg ) + { + case 'A': + case 'a': + FraseBit[cont][0] = 0x10; // 0001 0000; + FraseBit[cont][1] = 0x38; // 0011 1000; + FraseBit[cont][2] = 0x6C; // 0110 1100; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xFE; // 1111 1110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'B': + case 'b': + FraseBit[cont][0] = 0xFC; // 1111 1100; + FraseBit[cont][1] = 0x66; // 0110 0110; + FraseBit[cont][2] = 0x6C; // 0110 1100; + FraseBit[cont][3] = 0x78; // 0111 1000; + FraseBit[cont][4] = 0x6C; // 0110 1100; + FraseBit[cont][5] = 0x66; // 0110 0110; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xFC; // 1111 1100; + break; + case 'C': + case 'c': + FraseBit[cont][0] = 0x78; // 0111 1000; + FraseBit[cont][1] = 0xCC; // 1100 1100; + FraseBit[cont][2] = 0xC0; // 1100 0000; + FraseBit[cont][3] = 0xC0; // 1100 0000; + FraseBit[cont][4] = 0xC0; // 1100 0000; + FraseBit[cont][5] = 0xC0; // 1100 0000; + FraseBit[cont][6] = 0xCC; // 1100 1100; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + case 'D': + case 'd': + FraseBit[cont][0] = 0xF8; // 1111 1000; + FraseBit[cont][1] = 0x6C; // 0110 1100; + FraseBit[cont][2] = 0x66; // 0110 0110; + FraseBit[cont][3] = 0x66; // 0110 0110; + FraseBit[cont][4] = 0x66; // 0110 0110; + FraseBit[cont][5] = 0x66; // 0110 0110; + FraseBit[cont][6] = 0x6C; // 0110 1100; + FraseBit[cont][7] = 0xF8; // 1111 1000; + break; + case 'E': + case 'e': + FraseBit[cont][0] = 0xFE; // 1111 1110; + FraseBit[cont][1] = 0x66; // 0110 0110; + FraseBit[cont][2] = 0x62; // 0110 0010; + FraseBit[cont][3] = 0x68; // 0110 1000; + FraseBit[cont][4] = 0x78; // 0111 1000; + FraseBit[cont][5] = 0x68; // 0110 1010; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xFE; // 1111 1110; + break; + case 'F': + case 'f': + FraseBit[cont][0] = 0xFE; // 1111 1110; + FraseBit[cont][1] = 0x66; // 0110 0110; + FraseBit[cont][2] = 0x62; // 0110 0010; + FraseBit[cont][3] = 0x68; // 0110 1000; + FraseBit[cont][4] = 0x78; // 0111 1000; + FraseBit[cont][5] = 0x68; // 0110 1000; + FraseBit[cont][6] = 0x60; // 0110 0000; + FraseBit[cont][7] = 0xF0; // 1111 0000; + break; + case 'G': + case 'g': + FraseBit[cont][0] = 0x7C; // 0111 1100; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC2; // 1100 0010; + FraseBit[cont][3] = 0xC0; // 1100 0000; + FraseBit[cont][4] = 0xDE; // 1101 1110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0x3A; // 0011 1010; + break; + case 'H': + case 'h': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xFE; // 1111 1110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'I': + case 'i': + FraseBit[cont][0] = 0x7E; // 0111 1110; + FraseBit[cont][1] = 0x18; // 0001 1000; + FraseBit[cont][2] = 0x18; // 0001 1000; + FraseBit[cont][3] = 0x18; // 0001 1000; + FraseBit[cont][4] = 0x18; // 0001 1000; + FraseBit[cont][5] = 0x18; // 0001 1000; + FraseBit[cont][6] = 0x18; // 0001 1000; + FraseBit[cont][7] = 0x7E; // 0111 1110; + break; + case 'J': + case 'j': + FraseBit[cont][0] = 0x1E; // 0001 1110; + FraseBit[cont][1] = 0x0C; // 0000 1100; + FraseBit[cont][2] = 0x0C; // 0000 1100; + FraseBit[cont][3] = 0x0C; // 0000 1100; + FraseBit[cont][4] = 0x0C; // 0000 1100; + FraseBit[cont][5] = 0xCC; // 1100 1100; + FraseBit[cont][6] = 0xCC; // 1100 1100; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + case 'K': + case 'k': + FraseBit[cont][0] = 0xE6; // 1110 0110; + FraseBit[cont][1] = 0x66; // 0110 0110; + FraseBit[cont][2] = 0x6C; // 0110 1100; + FraseBit[cont][3] = 0x78; // 0111 1000; + FraseBit[cont][4] = 0x6C; // 0110 1100; + FraseBit[cont][5] = 0x66; // 0110 0110; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xE6; // 1110 0110; + break; + case 'L': + case 'l': + FraseBit[cont][0] = 0xF0; // 1111 0000; + FraseBit[cont][1] = 0x60; // 0110 0000; + FraseBit[cont][2] = 0x60; // 0110 0000; + FraseBit[cont][3] = 0x60; // 0110 0000; + FraseBit[cont][4] = 0x60; // 0110 0000; + FraseBit[cont][5] = 0x62; // 0110 0010; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xFE; // 1111 1110; + break; + case 'M': + case 'm': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xEE; // 1110 1110; + FraseBit[cont][2] = 0xD6; // 1101 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'N': + case 'n': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xE6; // 1110 0110; + FraseBit[cont][2] = 0xF6; // 1111 0110; + FraseBit[cont][3] = 0xDE; // 1101 1110; + FraseBit[cont][4] = 0xCE; // 1100 1110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case '¥': + case '¤': + FraseBit[cont][0] = 0x64; // 0110 0100; + FraseBit[cont][1] = 0x98; // 1001 1000; + FraseBit[cont][2] = 0x00; // 0000 0000; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xF6; // 1111 0110; + FraseBit[cont][5] = 0xDE; // 1101 1110; + FraseBit[cont][6] = 0xCE; // 1100 1110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'O': + case 'o': + FraseBit[cont][0] = 0x38; // 0011 1000; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x38; // 0011 1000; + break; + case 'P': + case 'p': + FraseBit[cont][0] = 0xFC; // 1111 1100; + FraseBit[cont][1] = 0x62; // 0110 0010; + FraseBit[cont][2] = 0x62; // 0110 0010; + FraseBit[cont][3] = 0x7C; // 0111 1100; + FraseBit[cont][4] = 0x60; // 0110 0000; + FraseBit[cont][5] = 0x60; // 0110 0000; + FraseBit[cont][6] = 0x60; // 0110 0000; + FraseBit[cont][7] = 0xF0; // 1111 0000; + break; + case 'Q': + case 'q': + FraseBit[cont][0] = 0x00; // 0011 1000; + FraseBit[cont][1] = 0x00; // 1100 0110; + FraseBit[cont][2] = 0x00; // 1100 0110; + FraseBit[cont][3] = 0x00; // 1100 0110; + FraseBit[cont][4] = 0x00; // 1101 0110; + FraseBit[cont][5] = 0x00; // 1101 1110; + FraseBit[cont][6] = 0x00; // 0111 1100; + FraseBit[cont][7] = 0x00; + + FraseBit[cont][0] = 0x38; // 0011 1000; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xCE; // 1100 1110; + FraseBit[cont][6] = 0x38; // 0011 1000; + FraseBit[cont][7] = 0x0E; // 0000 1110; + break; + case 'R': + case 'r': + FraseBit[cont][0] = 0xFC; // 1111 1100; + FraseBit[cont][1] = 0x62; // 0110 0010; + FraseBit[cont][2] = 0x62; // 0110 0010; + FraseBit[cont][3] = 0x7C; // 0111 1100; + FraseBit[cont][4] = 0x6E; // 0110 1110; + FraseBit[cont][5] = 0x66; // 0110 0110; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xE6; // 1110 0110; + break; + case 'S': + case 's': + FraseBit[cont][0] = 0x7C; // 0111 1100; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0x60; // 0110 0000; + FraseBit[cont][3] = 0x18; // 0001 1000; + FraseBit[cont][4] = 0x0C; // 0000 1100; + FraseBit[cont][5] = 0x06; // 0000 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case 'T': + case 't': + FraseBit[cont][0] = 0xFC; // 1111 1100; + FraseBit[cont][1] = 0xB4; // 1011 0100; + FraseBit[cont][2] = 0x30; // 0011 0000; + FraseBit[cont][3] = 0x30; // 0011 0000; + FraseBit[cont][4] = 0x30; // 0011 0000; + FraseBit[cont][5] = 0x30; // 0011 0000; + FraseBit[cont][6] = 0x30; // 0011 0000; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + case 'U': + case 'u': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case 'V': + case 'v': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0x6C; // 0110 1100; + FraseBit[cont][6] = 0x38; // 0011 1000; + FraseBit[cont][7] = 0x10; // 0001 0000; + break; + case 'W': + case 'w': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xD6; // 1101 0110; + FraseBit[cont][5] = 0xD6; // 1101 0110; + FraseBit[cont][6] = 0x7C; // 0111 1100; + FraseBit[cont][7] = 0x28; // 0010 1000; + break; + case 'X': + case 'x': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0x44; // 0100 0100; + FraseBit[cont][2] = 0x6C; // 0110 1100; + FraseBit[cont][3] = 0x38; // 0011 1000; + FraseBit[cont][4] = 0x38; // 0011 1000; + FraseBit[cont][5] = 0x6C; // 0110 1100; + FraseBit[cont][6] = 0x44; // 0100 0100; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'Y': + case 'y': + FraseBit[cont][0] = 0xCC; // 1100 1100; + FraseBit[cont][1] = 0xCC; // 1100 1100; + FraseBit[cont][2] = 0xCC; // 1100 1100; + FraseBit[cont][3] = 0x78; // 0111 1000; + FraseBit[cont][4] = 0x30; // 0011 0000; + FraseBit[cont][5] = 0x30; // 0011 0000; + FraseBit[cont][6] = 0x30; // 0011 0000; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + case 'Z': + case 'z': + FraseBit[cont][0] = 0xFE; // 1111 1110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0x8C; // 1000 1100; + FraseBit[cont][3] = 0x18; // 0001 1000; + FraseBit[cont][4] = 0x30; // 0011 0000; + FraseBit[cont][5] = 0x62; // 0110 0010; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xFE; // 1111 1110; + break; + case '0': + FraseBit[cont][0] = 0x38; // 0011 1000; + FraseBit[cont][1] = 0xCE; // 1100 1110; + FraseBit[cont][2] = 0xCE; // 1100 1110; + FraseBit[cont][3] = 0xD6; // 1101 0110; + FraseBit[cont][4] = 0xD6; // 1101 0110; + FraseBit[cont][5] = 0xE6; // 1110 0110; + FraseBit[cont][6] = 0xE6; // 1110 0110; + FraseBit[cont][7] = 0x38; // 0011 1000; + break; + case '1': + FraseBit[cont][0] = 0x0C; // 0000 1100; + FraseBit[cont][1] = 0x1C; // 0001 1100; + FraseBit[cont][2] = 0x3C; // 0011 1100; + FraseBit[cont][3] = 0x0C; // 0000 1100; + FraseBit[cont][4] = 0x0C; // 0000 1100; + FraseBit[cont][5] = 0x0C; // 0000 1100; + FraseBit[cont][6] = 0x0C; // 0000 1100; + FraseBit[cont][7] = 0x1E; // 0001 1110; + break; + case '2': + FraseBit[cont][0] = 0x78; // 0111 1000; + FraseBit[cont][1] = 0xCC; // 1100 1100; + FraseBit[cont][2] = 0x06; // 0000 0110; + FraseBit[cont][3] = 0x0C; // 0000 1100; + FraseBit[cont][4] = 0x18; // 0001 1000; + FraseBit[cont][5] = 0x30; // 0011 0000; + FraseBit[cont][6] = 0x60; // 0110 0000; + FraseBit[cont][7] = 0x7E; // 0111 1110; + break; + case '3': + FraseBit[cont][0] = 0x78; // 0111 1000; + FraseBit[cont][1] = 0xCC; // 1100 1100; + FraseBit[cont][2] = 0x06; // 0000 0110; + FraseBit[cont][3] = 0x0C; // 0000 1100; + FraseBit[cont][4] = 0x18; // 0001 1000; + FraseBit[cont][5] = 0x0C; // 0000 1100; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case '4': + FraseBit[cont][0] = 0x0C; // 0000 1100; + FraseBit[cont][1] = 0x1C; // 0001 1100; + FraseBit[cont][2] = 0x2C; // 0010 1100; + FraseBit[cont][3] = 0x4C; // 0100 1100; + FraseBit[cont][4] = 0xFE; // 1111 1110; + FraseBit[cont][5] = 0x0C; // 0000 1100; + FraseBit[cont][6] = 0x0C; // 0000 1100; + FraseBit[cont][7] = 0x1E; // 0001 1110; + break; + case '5': + FraseBit[cont][0] = 0xFE; // 1111 1110; + FraseBit[cont][1] = 0xC0; // 1100 0000; + FraseBit[cont][2] = 0xC0; // 1100 0000; + FraseBit[cont][3] = 0xF8; // 1111 1000; + FraseBit[cont][4] = 0x0C; // 0000 1100; + FraseBit[cont][5] = 0x06; // 0000 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case '6': + FraseBit[cont][0] = 0x3E; // 0011 1110; + FraseBit[cont][1] = 0x60; // 0110 0000; + FraseBit[cont][2] = 0xC0; // 1100 0000; + FraseBit[cont][3] = 0xFC; // 1111 1100; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case '8': + FraseBit[cont][0] = 0x7C; // 0111 1100; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0x7C; // 0111 1100; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case '9': + FraseBit[cont][0] = 0x7C; // 0111 1100; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0x7E; // 0111 1110; + FraseBit[cont][4] = 0x06; // 0000 0110; + FraseBit[cont][5] = 0x06; // 0000 0110; + FraseBit[cont][6] = 0x0C; // 0000 1100; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + + + + case '*': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x18; // 0001 1000; + FraseBit[cont][2] = 0x5A; // 0101 1010; + FraseBit[cont][3] = 0x3C; // 0011 1100; + FraseBit[cont][4] = 0x7E; // 0111 1110; + FraseBit[cont][5] = 0x3C; // 0011 1100; + FraseBit[cont][6] = 0x5A; // 0101 1010; + FraseBit[cont][7] = 0x18; // 0001 1000; + break; + case '-': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x00; // 0000 0000; + FraseBit[cont][2] = 0x00; // 0000 0000; + FraseBit[cont][3] = 0xFE; // 1111 1110; + FraseBit[cont][4] = 0xFE; // 1111 1110; + FraseBit[cont][5] = 0x00; // 0000 0000; + FraseBit[cont][6] = 0x00; // 0000 0000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + case '_': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x00; // 0000 0000; + FraseBit[cont][2] = 0x00; // 0000 0000; + FraseBit[cont][3] = 0x00; // 0000 0000; + FraseBit[cont][4] = 0x00; // 0000 0000; + FraseBit[cont][5] = 0x00; // 0000 0000; + FraseBit[cont][6] = 0xFE; // 1111 1110; + FraseBit[cont][7] = 0xFE; // 1111 1110; + break; + case '+': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x18; // 0001 1000; + FraseBit[cont][2] = 0x18; // 0001 1000; + FraseBit[cont][3] = 0xFE; // 1111 1110; + FraseBit[cont][4] = 0xFE; // 1111 1110; + FraseBit[cont][5] = 0x18; // 0001 1000; + FraseBit[cont][6] = 0x18; // 0001 1000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + case '<': + case '(': + FraseBit[cont][0] = 0x18; // 0001 1000; + FraseBit[cont][1] = 0x30; // 0011 0000; + FraseBit[cont][2] = 0x60; // 0110 0000; + FraseBit[cont][3] = 0xC0; // 1100 0000; + FraseBit[cont][4] = 0xC0; // 1100 0000; + FraseBit[cont][5] = 0x60; // 0110 0000; + FraseBit[cont][6] = 0x30; // 0011 0000; + FraseBit[cont][7] = 0x18; // 0001 1000; + break; + case '>': + case ')': + FraseBit[cont][0] = 0x18; // 0001 1000; + FraseBit[cont][1] = 0x0C; // 0000 1100; + FraseBit[cont][2] = 0x06; // 0000 0110; + FraseBit[cont][3] = 0x03; // 0000 0011; + FraseBit[cont][4] = 0x03; // 0000 0011; + FraseBit[cont][5] = 0x06; // 0000 0110; + FraseBit[cont][6] = 0x0C; // 0000 1100; + FraseBit[cont][7] = 0x18; // 0001 1000; + break; + case ':': + case ';': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x30; // 0011 0000; + FraseBit[cont][2] = 0x30; // 0011 0000; + FraseBit[cont][3] = 0x00; // 0000 0000; + FraseBit[cont][4] = 0x00; // 0000 0000; + FraseBit[cont][5] = 0x30; // 0011 0000; + FraseBit[cont][6] = 0x30; // 0011 0000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + case '\'': + FraseBit[cont][0] = 0x0C; // 0000 1100; + FraseBit[cont][1] = 0x0C; // 0000 1100; + FraseBit[cont][2] = 0x0C; // 0000 1100; + FraseBit[cont][3] = 0x10; // 0001 1000; + FraseBit[cont][4] = 0x00; // 0000 0000; + FraseBit[cont][5] = 0x00; // 0000 0000; + FraseBit[cont][6] = 0x00; // 0000 0000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + default: + FraseBit[cont][0] = 0x00; + FraseBit[cont][1] = 0x00; + FraseBit[cont][2] = 0x00; + FraseBit[cont][3] = 0x00; + FraseBit[cont][4] = 0x00; + FraseBit[cont][5] = 0x00; + FraseBit[cont][6] = 0x00; + FraseBit[cont][7] = 0x00; + break; + } + cont++; + Frase_seg++; + } + } else { + // Rotamos la frase + char FrBit_tmp[8]; + // Almacenamos el 1er bit que vamos a perder... + for ( j1=0; j1<8; j1++ ) + FrBit_tmp[j1] = 0x01 & ( FraseBit[0][j1] >> 7 ); + + for ( j=0; j> 7 ) ); + } + for ( j1=0; j1<8; j1++ ) + FraseBit[Flen1-1][j1] = ( FraseBit[Flen1-1][j1] & 0xFE ) | FrBit_tmp[j1]; + } + +// . . . . . . +// .ï ï. .ï ï. .ï ï. +// . . . . . +// __________.________________________.______________________.______________ +// . . . . . . +// . . . . . . +// ' .. ' ' .. ' ' .. ' +// +// . . +// . ï ï . +// . . +// ____________________._____________________.______________________________ +// . . ` ï +// . . ` ï +// . . ` ï +// . . . ` ï +// ` . . ï +// ndigitos --> m x. = 40 + //float i1; + int i1; + for ( i=0, i1=2; i < FA->ndigitos; i ++ ) + { + for ( j=0, j1=0; j1<8; j+=2*FA->AX, j1++ ) + { + // Analizamos el patron de BIT's y lo imprimimos + // FraseBit[cont][0] + // ^ ^----- N£mero de byte del digito ( 8x8 ) + // |_________ N£mero de digito alfa-numerico + for ( bit_s = 0; bit_s < 8; bit_s++, i1++/*+=.02*/ ) + { + if ( FraseBit[i][bit_s] & ( (char)0x01 << (7-j1) ) ) c_elec = FA->C2; else c_elec = FA->C1; + //putpixel ( FA->x + j + bit_s*2 + i*8*2*FA->AX, FA->y + sin( i1 )*20 + 2*bit_s*FA->AY, c_elec ); +putpixel ( FA->x + j - bit_s*2+(TabS[ (i+bit_s+j/*bit_s*/) % 255 ]-90) + i*8*2*FA->AX, FA->y - 100 +/* sin( i1 )*20*/TabS[i1 % 255] + 2*bit_s*FA->AY, c_elec ); + } +//y--> TabS[(i+j+bit_s) MOD FLen1] +//x--> + + } + } +} + + + + + + + + +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +void Fuente_Amplia3( char *Frase, p_graphics *FA ) +{ +int i; +char j, j1; + + +static char FraseBit[110][8]; +static char Frase1[100]; + +static unsigned int loop; +static unsigned int Flen; + char c_elec; + char bit_s; + char *Frase_seg; +static char Flen1; + Frase_seg = Frase1; + +if ( strcmp( Frase1, Frase ) != 0 ) + { + strncpy( Frase1, Frase, 99 ); + Frase1[99] = '\0'; + j = i = strlen( Frase ); + Flen = i * 8; + char cont = 0; + + if ( i < FA -> ndigitos ) + i += FA -> ndigitos - i; + else + i += 5; + + Flen1 = i; + + // Almacenamos en la Frase a Bit's la FRASE A BIT'S + while( cont <= i ) + { + // Descomponemos cada caracter en un patron de BIT's + if ( (cont - j) > 0 ) + { + FraseBit[cont][0] = 0x00; + FraseBit[cont][1] = 0x00; + FraseBit[cont][2] = 0x00; + FraseBit[cont][3] = 0x00; + FraseBit[cont][4] = 0x00; + FraseBit[cont][5] = 0x00; + FraseBit[cont][6] = 0x00; + FraseBit[cont][7] = 0x00; + } else + switch( *Frase_seg ) + { + case 'A': + case 'a': + FraseBit[cont][0] = 0x10; // 0001 0000; + FraseBit[cont][1] = 0x38; // 0011 1000; + FraseBit[cont][2] = 0x6C; // 0110 1100; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xFE; // 1111 1110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'B': + case 'b': + FraseBit[cont][0] = 0xFC; // 1111 1100; + FraseBit[cont][1] = 0x66; // 0110 0110; + FraseBit[cont][2] = 0x6C; // 0110 1100; + FraseBit[cont][3] = 0x78; // 0111 1000; + FraseBit[cont][4] = 0x6C; // 0110 1100; + FraseBit[cont][5] = 0x66; // 0110 0110; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xFC; // 1111 1100; + break; + case 'C': + case 'c': + FraseBit[cont][0] = 0x78; // 0111 1000; + FraseBit[cont][1] = 0xCC; // 1100 1100; + FraseBit[cont][2] = 0xC0; // 1100 0000; + FraseBit[cont][3] = 0xC0; // 1100 0000; + FraseBit[cont][4] = 0xC0; // 1100 0000; + FraseBit[cont][5] = 0xC0; // 1100 0000; + FraseBit[cont][6] = 0xCC; // 1100 1100; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + case 'D': + case 'd': + FraseBit[cont][0] = 0xF8; // 1111 1000; + FraseBit[cont][1] = 0x6C; // 0110 1100; + FraseBit[cont][2] = 0x66; // 0110 0110; + FraseBit[cont][3] = 0x66; // 0110 0110; + FraseBit[cont][4] = 0x66; // 0110 0110; + FraseBit[cont][5] = 0x66; // 0110 0110; + FraseBit[cont][6] = 0x6C; // 0110 1100; + FraseBit[cont][7] = 0xF8; // 1111 1000; + break; + case 'E': + case 'e': + FraseBit[cont][0] = 0xFE; // 1111 1110; + FraseBit[cont][1] = 0x66; // 0110 0110; + FraseBit[cont][2] = 0x62; // 0110 0010; + FraseBit[cont][3] = 0x68; // 0110 1000; + FraseBit[cont][4] = 0x78; // 0111 1000; + FraseBit[cont][5] = 0x68; // 0110 1010; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xFE; // 1111 1110; + break; + case 'F': + case 'f': + FraseBit[cont][0] = 0xFE; // 1111 1110; + FraseBit[cont][1] = 0x66; // 0110 0110; + FraseBit[cont][2] = 0x62; // 0110 0010; + FraseBit[cont][3] = 0x68; // 0110 1000; + FraseBit[cont][4] = 0x78; // 0111 1000; + FraseBit[cont][5] = 0x68; // 0110 1000; + FraseBit[cont][6] = 0x60; // 0110 0000; + FraseBit[cont][7] = 0xF0; // 1111 0000; + break; + case 'G': + case 'g': + FraseBit[cont][0] = 0x7C; // 0111 1100; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC2; // 1100 0010; + FraseBit[cont][3] = 0xC0; // 1100 0000; + FraseBit[cont][4] = 0xDE; // 1101 1110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0x3A; // 0011 1010; + break; + case 'H': + case 'h': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xFE; // 1111 1110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'I': + case 'i': + FraseBit[cont][0] = 0x7E; // 0111 1110; + FraseBit[cont][1] = 0x18; // 0001 1000; + FraseBit[cont][2] = 0x18; // 0001 1000; + FraseBit[cont][3] = 0x18; // 0001 1000; + FraseBit[cont][4] = 0x18; // 0001 1000; + FraseBit[cont][5] = 0x18; // 0001 1000; + FraseBit[cont][6] = 0x18; // 0001 1000; + FraseBit[cont][7] = 0x7E; // 0111 1110; + break; + case 'J': + case 'j': + FraseBit[cont][0] = 0x1E; // 0001 1110; + FraseBit[cont][1] = 0x0C; // 0000 1100; + FraseBit[cont][2] = 0x0C; // 0000 1100; + FraseBit[cont][3] = 0x0C; // 0000 1100; + FraseBit[cont][4] = 0x0C; // 0000 1100; + FraseBit[cont][5] = 0xCC; // 1100 1100; + FraseBit[cont][6] = 0xCC; // 1100 1100; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + case 'K': + case 'k': + FraseBit[cont][0] = 0xE6; // 1110 0110; + FraseBit[cont][1] = 0x66; // 0110 0110; + FraseBit[cont][2] = 0x6C; // 0110 1100; + FraseBit[cont][3] = 0x78; // 0111 1000; + FraseBit[cont][4] = 0x6C; // 0110 1100; + FraseBit[cont][5] = 0x66; // 0110 0110; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xE6; // 1110 0110; + break; + case 'L': + case 'l': + FraseBit[cont][0] = 0xF0; // 1111 0000; + FraseBit[cont][1] = 0x60; // 0110 0000; + FraseBit[cont][2] = 0x60; // 0110 0000; + FraseBit[cont][3] = 0x60; // 0110 0000; + FraseBit[cont][4] = 0x60; // 0110 0000; + FraseBit[cont][5] = 0x62; // 0110 0010; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xFE; // 1111 1110; + break; + case 'M': + case 'm': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xEE; // 1110 1110; + FraseBit[cont][2] = 0xD6; // 1101 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'N': + case 'n': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xE6; // 1110 0110; + FraseBit[cont][2] = 0xF6; // 1111 0110; + FraseBit[cont][3] = 0xDE; // 1101 1110; + FraseBit[cont][4] = 0xCE; // 1100 1110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case '¥': + case '¤': + FraseBit[cont][0] = 0x64; // 0110 0100; + FraseBit[cont][1] = 0x98; // 1001 1000; + FraseBit[cont][2] = 0x00; // 0000 0000; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xF6; // 1111 0110; + FraseBit[cont][5] = 0xDE; // 1101 1110; + FraseBit[cont][6] = 0xCE; // 1100 1110; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'O': + case 'o': + FraseBit[cont][0] = 0x38; // 0011 1000; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x38; // 0011 1000; + break; + case 'P': + case 'p': + FraseBit[cont][0] = 0xFC; // 1111 1100; + FraseBit[cont][1] = 0x62; // 0110 0010; + FraseBit[cont][2] = 0x62; // 0110 0010; + FraseBit[cont][3] = 0x7C; // 0111 1100; + FraseBit[cont][4] = 0x60; // 0110 0000; + FraseBit[cont][5] = 0x60; // 0110 0000; + FraseBit[cont][6] = 0x60; // 0110 0000; + FraseBit[cont][7] = 0xF0; // 1111 0000; + break; + case 'Q': + case 'q': + FraseBit[cont][0] = 0x00; // 0011 1000; + FraseBit[cont][1] = 0x00; // 1100 0110; + FraseBit[cont][2] = 0x00; // 1100 0110; + FraseBit[cont][3] = 0x00; // 1100 0110; + FraseBit[cont][4] = 0x00; // 1101 0110; + FraseBit[cont][5] = 0x00; // 1101 1110; + FraseBit[cont][6] = 0x00; // 0111 1100; + FraseBit[cont][7] = 0x00; + + FraseBit[cont][0] = 0x38; // 0011 1000; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xCE; // 1100 1110; + FraseBit[cont][6] = 0x38; // 0011 1000; + FraseBit[cont][7] = 0x0E; // 0000 1110; + break; + case 'R': + case 'r': + FraseBit[cont][0] = 0xFC; // 1111 1100; + FraseBit[cont][1] = 0x62; // 0110 0010; + FraseBit[cont][2] = 0x62; // 0110 0010; + FraseBit[cont][3] = 0x7C; // 0111 1100; + FraseBit[cont][4] = 0x6E; // 0110 1110; + FraseBit[cont][5] = 0x66; // 0110 0110; + FraseBit[cont][6] = 0x66; // 0110 0110; + FraseBit[cont][7] = 0xE6; // 1110 0110; + break; + case 'S': + case 's': + FraseBit[cont][0] = 0x7C; // 0111 1100; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0x60; // 0110 0000; + FraseBit[cont][3] = 0x18; // 0001 1000; + FraseBit[cont][4] = 0x0C; // 0000 1100; + FraseBit[cont][5] = 0x06; // 0000 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case 'T': + case 't': + FraseBit[cont][0] = 0xFC; // 1111 1100; + FraseBit[cont][1] = 0xB4; // 1011 0100; + FraseBit[cont][2] = 0x30; // 0011 0000; + FraseBit[cont][3] = 0x30; // 0011 0000; + FraseBit[cont][4] = 0x30; // 0011 0000; + FraseBit[cont][5] = 0x30; // 0011 0000; + FraseBit[cont][6] = 0x30; // 0011 0000; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + case 'U': + case 'u': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case 'V': + case 'v': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0x6C; // 0110 1100; + FraseBit[cont][6] = 0x38; // 0011 1000; + FraseBit[cont][7] = 0x10; // 0001 0000; + break; + case 'W': + case 'w': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0xC6; // 1100 0110; + FraseBit[cont][4] = 0xD6; // 1101 0110; + FraseBit[cont][5] = 0xD6; // 1101 0110; + FraseBit[cont][6] = 0x7C; // 0111 1100; + FraseBit[cont][7] = 0x28; // 0010 1000; + break; + case 'X': + case 'x': + FraseBit[cont][0] = 0xC6; // 1100 0110; + FraseBit[cont][1] = 0x44; // 0100 0100; + FraseBit[cont][2] = 0x6C; // 0110 1100; + FraseBit[cont][3] = 0x38; // 0011 1000; + FraseBit[cont][4] = 0x38; // 0011 1000; + FraseBit[cont][5] = 0x6C; // 0110 1100; + FraseBit[cont][6] = 0x44; // 0100 0100; + FraseBit[cont][7] = 0xC6; // 1100 0110; + break; + case 'Y': + case 'y': + FraseBit[cont][0] = 0xCC; // 1100 1100; + FraseBit[cont][1] = 0xCC; // 1100 1100; + FraseBit[cont][2] = 0xCC; // 1100 1100; + FraseBit[cont][3] = 0x78; // 0111 1000; + FraseBit[cont][4] = 0x30; // 0011 0000; + FraseBit[cont][5] = 0x30; // 0011 0000; + FraseBit[cont][6] = 0x30; // 0011 0000; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + case 'Z': + case 'z': + FraseBit[cont][0] = 0xFE; // 1111 1110; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0x8C; // 1000 1100; + FraseBit[cont][3] = 0x18; // 0001 1000; + FraseBit[cont][4] = 0x30; // 0011 0000; + FraseBit[cont][5] = 0x62; // 0110 0010; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0xFE; // 1111 1110; + break; + + case '0': + FraseBit[cont][0] = 0x38; // 0011 1000; + FraseBit[cont][1] = 0xCE; // 1100 1110; + FraseBit[cont][2] = 0xCE; // 1100 1110; + FraseBit[cont][3] = 0xD6; // 1101 0110; + FraseBit[cont][4] = 0xD6; // 1101 0110; + FraseBit[cont][5] = 0xE6; // 1110 0110; + FraseBit[cont][6] = 0xE6; // 1110 0110; + FraseBit[cont][7] = 0x38; // 0011 1000; + break; + case '1': + FraseBit[cont][0] = 0x0C; // 0000 1100; + FraseBit[cont][1] = 0x1C; // 0001 1100; + FraseBit[cont][2] = 0x3C; // 0011 1100; + FraseBit[cont][3] = 0x0C; // 0000 1100; + FraseBit[cont][4] = 0x0C; // 0000 1100; + FraseBit[cont][5] = 0x0C; // 0000 1100; + FraseBit[cont][6] = 0x0C; // 0000 1100; + FraseBit[cont][7] = 0x1E; // 0001 1110; + break; + case '2': + FraseBit[cont][0] = 0x78; // 0111 1000; + FraseBit[cont][1] = 0xCC; // 1100 1100; + FraseBit[cont][2] = 0x06; // 0000 0110; + FraseBit[cont][3] = 0x0C; // 0000 1100; + FraseBit[cont][4] = 0x18; // 0001 1000; + FraseBit[cont][5] = 0x30; // 0011 0000; + FraseBit[cont][6] = 0x60; // 0110 0000; + FraseBit[cont][7] = 0x7E; // 0111 1110; + break; + case '3': + FraseBit[cont][0] = 0x78; // 0111 1000; + FraseBit[cont][1] = 0xCC; // 1100 1100; + FraseBit[cont][2] = 0x06; // 0000 0110; + FraseBit[cont][3] = 0x0C; // 0000 1100; + FraseBit[cont][4] = 0x18; // 0001 1000; + FraseBit[cont][5] = 0x0C; // 0000 1100; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case '4': + FraseBit[cont][0] = 0x0C; // 0000 1100; + FraseBit[cont][1] = 0x1C; // 0001 1100; + FraseBit[cont][2] = 0x2C; // 0010 1100; + FraseBit[cont][3] = 0x4C; // 0100 1100; + FraseBit[cont][4] = 0xFE; // 1111 1110; + FraseBit[cont][5] = 0x0C; // 0000 1100; + FraseBit[cont][6] = 0x0C; // 0000 1100; + FraseBit[cont][7] = 0x1E; // 0001 1110; + break; + case '5': + FraseBit[cont][0] = 0xFE; // 1111 1110; + FraseBit[cont][1] = 0xC0; // 1100 0000; + FraseBit[cont][2] = 0xC0; // 1100 0000; + FraseBit[cont][3] = 0xF8; // 1111 1000; + FraseBit[cont][4] = 0x0C; // 0000 1100; + FraseBit[cont][5] = 0x06; // 0000 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case '6': + FraseBit[cont][0] = 0x3E; // 0011 1110; + FraseBit[cont][1] = 0x60; // 0110 0000; + FraseBit[cont][2] = 0xC0; // 1100 0000; + FraseBit[cont][3] = 0xFC; // 1111 1100; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case '8': + FraseBit[cont][0] = 0x7C; // 0111 1100; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0x7C; // 0111 1100; + FraseBit[cont][4] = 0xC6; // 1100 0110; + FraseBit[cont][5] = 0xC6; // 1100 0110; + FraseBit[cont][6] = 0xC6; // 1100 0110; + FraseBit[cont][7] = 0x7C; // 0111 1100; + break; + case '9': + FraseBit[cont][0] = 0x7C; // 0111 1100; + FraseBit[cont][1] = 0xC6; // 1100 0110; + FraseBit[cont][2] = 0xC6; // 1100 0110; + FraseBit[cont][3] = 0x7E; // 0111 1110; + FraseBit[cont][4] = 0x06; // 0000 0110; + FraseBit[cont][5] = 0x06; // 0000 0110; + FraseBit[cont][6] = 0x0C; // 0000 1100; + FraseBit[cont][7] = 0x78; // 0111 1000; + break; + + + case '*': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x18; // 0001 1000; + FraseBit[cont][2] = 0x5A; // 0101 1010; + FraseBit[cont][3] = 0x3C; // 0011 1100; + FraseBit[cont][4] = 0x7E; // 0111 1110; + FraseBit[cont][5] = 0x3C; // 0011 1100; + FraseBit[cont][6] = 0x5A; // 0101 1010; + FraseBit[cont][7] = 0x18; // 0001 1000; + break; + case '-': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x00; // 0000 0000; + FraseBit[cont][2] = 0x00; // 0000 0000; + FraseBit[cont][3] = 0xFE; // 1111 1110; + FraseBit[cont][4] = 0xFE; // 1111 1110; + FraseBit[cont][5] = 0x00; // 0000 0000; + FraseBit[cont][6] = 0x00; // 0000 0000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + case '_': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x00; // 0000 0000; + FraseBit[cont][2] = 0x00; // 0000 0000; + FraseBit[cont][3] = 0x00; // 0000 0000; + FraseBit[cont][4] = 0x00; // 0000 0000; + FraseBit[cont][5] = 0x00; // 0000 0000; + FraseBit[cont][6] = 0xFE; // 1111 1110; + FraseBit[cont][7] = 0xFE; // 1111 1110; + break; + case '+': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x18; // 0001 1000; + FraseBit[cont][2] = 0x18; // 0001 1000; + FraseBit[cont][3] = 0xFE; // 1111 1110; + FraseBit[cont][4] = 0xFE; // 1111 1110; + FraseBit[cont][5] = 0x18; // 0001 1000; + FraseBit[cont][6] = 0x18; // 0001 1000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + case '<': + case '(': + FraseBit[cont][0] = 0x18; // 0001 1000; + FraseBit[cont][1] = 0x30; // 0011 0000; + FraseBit[cont][2] = 0x60; // 0110 0000; + FraseBit[cont][3] = 0xC0; // 1100 0000; + FraseBit[cont][4] = 0xC0; // 1100 0000; + FraseBit[cont][5] = 0x60; // 0110 0000; + FraseBit[cont][6] = 0x30; // 0011 0000; + FraseBit[cont][7] = 0x18; // 0001 1000; + break; + case '>': + case ')': + FraseBit[cont][0] = 0x18; // 0001 1000; + FraseBit[cont][1] = 0x0C; // 0000 1100; + FraseBit[cont][2] = 0x06; // 0000 0110; + FraseBit[cont][3] = 0x03; // 0000 0011; + FraseBit[cont][4] = 0x03; // 0000 0011; + FraseBit[cont][5] = 0x06; // 0000 0110; + FraseBit[cont][6] = 0x0C; // 0000 1100; + FraseBit[cont][7] = 0x18; // 0001 1000; + break; + case ':': + case ';': + FraseBit[cont][0] = 0x00; // 0000 0000; + FraseBit[cont][1] = 0x30; // 0011 0000; + FraseBit[cont][2] = 0x30; // 0011 0000; + FraseBit[cont][3] = 0x00; // 0000 0000; + FraseBit[cont][4] = 0x00; // 0000 0000; + FraseBit[cont][5] = 0x30; // 0011 0000; + FraseBit[cont][6] = 0x30; // 0011 0000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + case '\'': + FraseBit[cont][0] = 0x0C; // 0000 1100; + FraseBit[cont][1] = 0x0C; // 0000 1100; + FraseBit[cont][2] = 0x0C; // 0000 1100; + FraseBit[cont][3] = 0x10; // 0001 1000; + FraseBit[cont][4] = 0x00; // 0000 0000; + FraseBit[cont][5] = 0x00; // 0000 0000; + FraseBit[cont][6] = 0x00; // 0000 0000; + FraseBit[cont][7] = 0x00; // 0000 0000; + break; + default: + FraseBit[cont][0] = 0x00; + FraseBit[cont][1] = 0x00; + FraseBit[cont][2] = 0x00; + FraseBit[cont][3] = 0x00; + FraseBit[cont][4] = 0x00; + FraseBit[cont][5] = 0x00; + FraseBit[cont][6] = 0x00; + FraseBit[cont][7] = 0x00; + break; + } + cont++; + Frase_seg++; + } + } else { + // Rotamos la frase + char FrBit_tmp[8]; + // Almacenamos el 1er bit que vamos a perder... + for ( j1=0; j1<8; j1++ ) + FrBit_tmp[j1] = 0x01 & ( FraseBit[0][j1] >> 7 ); + + for ( j=0; j> 7 ) ); + } + for ( j1=0; j1<8; j1++ ) + FraseBit[Flen1-1][j1] = ( FraseBit[Flen1-1][j1] & 0xFE ) | FrBit_tmp[j1]; + } + +// . . . . . . +// .ï ï. .ï ï. .ï ï. +// . . . . . +// __________.________________________.______________________.______________ +// . . . . . . +// . . . . . . +// ' .. ' ' .. ' ' .. ' +// +// . . +// . ï ï . +// . . +// ____________________._____________________.______________________________ +// . . ` ï +// . . ` ï +// . . ` ï +// . . . ` ï +// ` . . ï +// ndigitos --> m x. = 40 + float i1; + for ( i=0, i1=3; i < FA->ndigitos; i ++ ) + { + for ( j=0, j1=0; j1<8; j+=2*FA->AX, j1++ ) + { + // Analizamos el patron de BIT's y lo imprimimos + // FraseBit[cont][0] + // ^ ^----- N£mero de byte del digito ( 8x8 ) + // |_________ N£mero de digito alfa-numerico + for ( bit_s = 0; bit_s < 8; bit_s++, i1+=.003 ) + { + + if ( FraseBit[i][bit_s] & ( (char)0x01 << (7-j1) ) ) c_elec = FA->C2; else c_elec = FA->C1; + putpixel ( FA->x + j + bit_s*2+ i*8*2*FA->AX, FA->y + sin( i1 )*70 + 2*bit_s*FA->AY, c_elec ); + } + } + } +} diff --git a/R.BAT b/R.BAT new file mode 100644 index 0000000..ac856b8 --- /dev/null +++ b/R.BAT @@ -0,0 +1 @@ +edit frec.img diff --git a/README.md b/README.md new file mode 100644 index 0000000..523048f --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +#FREC + + +*11/11/1991* + +ToDo: wwtcf? + + +![screenshot](/FREC.png "Screenshot")