First commit 22/02/1998
This commit is contained in:
		
							
								
								
									
										549
									
								
								LEDS.CPP
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										549
									
								
								LEDS.CPP
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,549 @@
 | 
				
			|||||||
 | 
					#include <dos.h>
 | 
				
			||||||
 | 
					#include <mem.h>
 | 
				
			||||||
 | 
					#include <math.h>
 | 
				
			||||||
 | 
					#include <conio.h>
 | 
				
			||||||
 | 
					#include <ctype.h>
 | 
				
			||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					#include <graphics.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//#include "alum_def.h"
 | 
				
			||||||
 | 
					//extern void Error( int code, char *MensajeError );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					char *ptr_char;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					char *VidRam = (char *)MK_FP( 0xA000, 0);
 | 
				
			||||||
 | 
					void far PutPixel(unsigned int x, unsigned int y, int c_elec );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					  int x, y;
 | 
				
			||||||
 | 
					  char ndigitos;
 | 
				
			||||||
 | 
					  char AX, AY;
 | 
				
			||||||
 | 
					  char C1, C2, C3;
 | 
				
			||||||
 | 
					 } p_graphics;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					  int x, y;             // Coordenadas iniciales de muestreo
 | 
				
			||||||
 | 
					  char ndigitos;        // n<>mero de digitos a mostrar
 | 
				
			||||||
 | 
					  char AX, AY;          // factor de espaciado
 | 
				
			||||||
 | 
					  char C1, C2, C3;      // colores de fondo, texto, borde
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Datos privados y uso interno exclusivamente
 | 
				
			||||||
 | 
					  unsigned int  Flen;   // longitud de la frase actual
 | 
				
			||||||
 | 
					  char BitByte;         // bit del byte por el que va en el recorrido
 | 
				
			||||||
 | 
					  char currByte;        // byte actual dentro de la frase
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 } p_Ampliada;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int Numero_Digital( long numero,  p_graphics *ND );
 | 
				
			||||||
 | 
					void Fuente_Amplia( char *Frase, p_graphics *FA );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 /**************************************************************************\
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|* Numero_Digital                                                           *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|* Descripcion:                                                             *|
 | 
				
			||||||
 | 
					|*             Muestra un numero, con forma digital en pantalla,            *|
 | 
				
			||||||
 | 
					|*             escalandolo seg<65>n los factores indicados en p_graphics       *|
 | 
				
			||||||
 | 
					|*             ( 9 digitos como m<>ximo )                                    *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|* Entradas:                                                                *|
 | 
				
			||||||
 | 
					|*             N<>mero y estructura de muestreo                              *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					|* Salidas:    (ninguna)                                                    *|
 | 
				
			||||||
 | 
					|*                                                                          *|
 | 
				
			||||||
 | 
					 \**************************************************************************/
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					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 char vez = 0;
 | 
				
			||||||
 | 
					 static p_graphics ND1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 char dnum=0, i, j, digital;
 | 
				
			||||||
 | 
					 int punto[10];
 | 
				
			||||||
 | 
					 int CONST = 0;
 | 
				
			||||||
 | 
					 char DnTmp[2];
 | 
				
			||||||
 | 
					 char signo = 0;
 | 
				
			||||||
 | 
					 static old_signo = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // Si ha cambiado la posicion, el n<> de digitos, o el factor de escala
 | 
				
			||||||
 | 
					 // habr<62> que recalcularlo todo.
 | 
				
			||||||
 | 
					 if (
 | 
				
			||||||
 | 
					      ND1.x        != ND -> x          ||    ND1.y != ND -> y   ||
 | 
				
			||||||
 | 
					      ND1.ndigitos != ND -> ndigitos   ||
 | 
				
			||||||
 | 
					      ND1.AX       != ND -> AX         ||    ND1.AY != ND -> AY
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					   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;
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // Miramos el signo del n<>mero
 | 
				
			||||||
 | 
					 if ( numero < 0 )
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					  numero *= -1;
 | 
				
			||||||
 | 
					  signo = 1;
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 if ( signo != old_signo ) vez = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 setcolor(ND -> C3);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // Miro todas las cifras que componen el n<>mero
 | 
				
			||||||
 | 
					 for( i=0; i < ND -> ndigitos; i++ )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					   dnum = numero % 10;
 | 
				
			||||||
 | 
					   digital = numero;
 | 
				
			||||||
 | 
					   numero /= 10;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   // Si el n<>mero pintado con anterioridad es distinto al actual, lo dibujamos
 | 
				
			||||||
 | 
					   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];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     //  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 far PutPixel(unsigned int x, unsigned int y, int c_elec )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  if ( x < 320 && y < 200 )
 | 
				
			||||||
 | 
					             *(VidRam + (x + y*320) ) = c_elec;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void LeeFuentes(char *file)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					FILE *fich;
 | 
				
			||||||
 | 
						/* Reservamos 4 Kb. para cargar la fuente en memoria */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Abrimos el fichero de la fuente */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ((fich=fopen(file,"rb"))==NULL) {
 | 
				
			||||||
 | 
					                printf("\a\nArchivo %s no encontrado.\n",file);
 | 
				
			||||||
 | 
					//		Error(0, "No se encuentra el archivo de fuentes");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						fseek(fich, SEEK_SET, 0);	/* Nos colocamos al principio del fichero     */
 | 
				
			||||||
 | 
					        fread(ptr_char,1,4096,fich);      /* Cargamos en memoria 4096 bytes del fichero */
 | 
				
			||||||
 | 
						fclose(fich);					/* Cerramos el fichero 								 */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define TAMx 8
 | 
				
			||||||
 | 
					#define TAMy 8
 | 
				
			||||||
 | 
					void Fuente_Amplia( char *Frase, p_Ampliada far *FA )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 int  i, j, k;           // Variables de avance
 | 
				
			||||||
 | 
					 int  c_elec;            // Color en el momento de imprimir
 | 
				
			||||||
 | 
					 int  PosX, PosY;        // Posicion fisica final
 | 
				
			||||||
 | 
					 char LCaract;           // Caracter de linea a tratar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 if ( FA->Flen != _fstrlen( Frase ) ) // Reseteamos las variables de control interno
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					  // Obtenemos la longitud de la frase. ( En d<>gitos )
 | 
				
			||||||
 | 
					  FA -> Flen = _fstrlen( Frase );
 | 
				
			||||||
 | 
					  // Contador de digito actual a cero
 | 
				
			||||||
 | 
					  FA -> BitByte  = 0;
 | 
				
			||||||
 | 
					  // Posicion dentro de la frase
 | 
				
			||||||
 | 
					  FA -> currByte = 0;
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // Avance horizontal de bit's ( avance de digitos )
 | 
				
			||||||
 | 
					 for ( i = 0; i < ( TAMx * (FA -> ndigitos) ); i++ )
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					  k = ( (unsigned char)Frase[ ( (i+FA->BitByte)/TAMx + FA -> currByte ) % FA->Flen ] ) << 4;
 | 
				
			||||||
 | 
					  LCaract = ( (char)0x01 << (7 - (i+FA->BitByte)%TAMx) );
 | 
				
			||||||
 | 
					  PosX = FA -> x + FA->AX   * i;         // Posicion f<>sica horizontal
 | 
				
			||||||
 | 
					  // Avance vertical de bit's
 | 
				
			||||||
 | 
					  for ( j = 0; j < TAMy; j ++ )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    PosY = FA -> y + FA->AY * j;         // Posicion f<>sica vertical
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ( ptr_char[ k + j ] & LCaract )
 | 
				
			||||||
 | 
					      c_elec = FA->C2;
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      c_elec = FA->C1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    putpixel ( PosX, PosY, c_elec );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 // Tenemos en cuenta el avance dentro de la frase
 | 
				
			||||||
 | 
					 if ( ( FA -> BitByte ++ ) >= 7 )
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					  FA -> BitByte = 0; FA -> currByte ++;
 | 
				
			||||||
 | 
					  if ( FA -> currByte >= FA -> Flen )
 | 
				
			||||||
 | 
					     FA -> currByte = 0;
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#undef TAMy
 | 
				
			||||||
 | 
					#undef TAMx
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define TAMx  8
 | 
				
			||||||
 | 
					#define TAMy 16
 | 
				
			||||||
 | 
					void Fuente_Amplia3( char *Frase, p_Ampliada far *FA )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 int  i, j, k;           // Variables de avance
 | 
				
			||||||
 | 
					 int  c_elec;            // Color en el momento de imprimir
 | 
				
			||||||
 | 
					 int  PosX, PosY;        // Posicion fisica final
 | 
				
			||||||
 | 
					 char LCaract;           // Caracter de linea a tratar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 if ( FA->Flen != _fstrlen( Frase ) ) // Reseteamos las variables de control interno
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					  // Obtenemos la longitud de la frase. ( En d<>gitos )
 | 
				
			||||||
 | 
					  FA -> Flen = _fstrlen( Frase );
 | 
				
			||||||
 | 
					  // Contador de digito actual a cero
 | 
				
			||||||
 | 
					  FA -> BitByte  = 0;
 | 
				
			||||||
 | 
					  // Posicion dentro de la frase
 | 
				
			||||||
 | 
					  FA -> currByte = 0;
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // Avance horizontal de bit's ( avance de digitos )
 | 
				
			||||||
 | 
					 for ( i = 0; i < ( TAMx * (FA -> ndigitos) ); i++ )
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					  k = ( (unsigned char)Frase[ ( (i+FA->BitByte)/TAMx + FA -> currByte ) % FA->Flen ] ) << 4;
 | 
				
			||||||
 | 
					  LCaract = ( (char)0x01 << (7 - (i+FA->BitByte)%TAMx) );
 | 
				
			||||||
 | 
					  PosX = FA -> x + FA->AX   * i;         // Posicion f<>sica horizontal
 | 
				
			||||||
 | 
					  // Avance vertical de bit's
 | 
				
			||||||
 | 
					  for ( j = 0; j < TAMy; j ++ )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    PosY = FA -> y + FA->AY * j;         // Posicion f<>sica vertical
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ( ptr_char[ k + j ] & LCaract )
 | 
				
			||||||
 | 
					      c_elec = FA->C2;
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      c_elec = FA->C1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    PutPixel ( PosX, PosY, c_elec );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 // Tenemos en cuenta el avance dentro de la frase
 | 
				
			||||||
 | 
					 if ( ( FA -> BitByte ++ ) >= 7 )
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					  FA -> BitByte = 0; FA -> currByte ++;
 | 
				
			||||||
 | 
					  if ( FA -> currByte >= FA -> Flen )
 | 
				
			||||||
 | 
					     FA -> currByte = 0;
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#undef TAMy
 | 
				
			||||||
 | 
					#undef TAMx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/////<2F><>/////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					////<2F>/////////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					/////<2F><>/////<2F>///////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					//////<2F>///<2F>////<2F>/<2F>//////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					///////<2F>/<2F>///<2F>//////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					////////<2F>//<2F>////<2F>///////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					/////////<2F>////<2F>/////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					///////////<2F>////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					#define TAMx  8
 | 
				
			||||||
 | 
					#define TAMy  7//16
 | 
				
			||||||
 | 
					void FuenteAmplia( char *Frase, p_Ampliada far *FA )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					 int  i, j, k;           // Variables de avance
 | 
				
			||||||
 | 
					 int  c_elec;            // Color en el momento de imprimir
 | 
				
			||||||
 | 
					 int  PosX, PosY;        // Posicion fisica final
 | 
				
			||||||
 | 
					 int  LCaract;           // Caracter de linea a tratar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 if ( FA->C3 == -1 || FA->Flen != _fstrlen( Frase ) )              // Reseteamos las variables de control interno
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					  // Obtenemos la longitud de la frase. ( En d<>gitos )
 | 
				
			||||||
 | 
					  FA -> Flen = _fstrlen( Frase );
 | 
				
			||||||
 | 
					  // Contador de digito actual a cero
 | 
				
			||||||
 | 
					  FA -> BitByte  = 0;
 | 
				
			||||||
 | 
					  // Posicion dentro de la frase
 | 
				
			||||||
 | 
					  FA -> currByte = 0;
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // Avance horizontal de bit's ( avance de digitos )
 | 
				
			||||||
 | 
					 for ( i = 0; i < ( TAMx * (FA -> ndigitos) ); i++ )
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					  k = ( (unsigned char)Frase[ ( (i+FA->BitByte)/TAMx + FA -> currByte ) % FA->Flen ] ) << 4;
 | 
				
			||||||
 | 
					  LCaract = ( (char)0x01 << (7 - (i+FA->BitByte)%TAMx) );
 | 
				
			||||||
 | 
					  PosX = FA -> x + FA->AX   * i;         // Posicion f<>sica horizontal
 | 
				
			||||||
 | 
					  // Avance vertical de bit's
 | 
				
			||||||
 | 
					  for ( j = 0; j < TAMy; j ++ )
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    PosY = FA -> y + FA->AY * j;         // Posicion f<>sica vertical
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ( ptr_char[ k + j ] & LCaract )
 | 
				
			||||||
 | 
					      c_elec = FA->C2;
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      c_elec = FA->C1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    PutPixel ( PosX, PosY, c_elec );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 // Tenemos en cuenta el avance dentro de la frase
 | 
				
			||||||
 | 
					 if ( ( FA -> BitByte ++ ) >= 7 )
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					  FA -> BitByte = 0; FA -> currByte ++;
 | 
				
			||||||
 | 
					  if ( FA -> currByte >= FA -> Flen )
 | 
				
			||||||
 | 
					     FA -> currByte = 0;
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#undef TAMy
 | 
				
			||||||
 | 
					#undef TAMx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void main(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  p_Ampliada P;
 | 
				
			||||||
 | 
					  int ok = 0;
 | 
				
			||||||
 | 
					  unsigned delayT;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  P.x = P.y = 0;
 | 
				
			||||||
 | 
					  P.ndigitos = 1;
 | 
				
			||||||
 | 
					  P.AX = P.AY = 1;
 | 
				
			||||||
 | 
					  P.C1 = EGA_DARKGRAY;
 | 
				
			||||||
 | 
					  P.C2 = EGA_RED;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( ( ptr_char = new char [4096] ) == NULL )
 | 
				
			||||||
 | 
					   return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Cambiamos a 320x200
 | 
				
			||||||
 | 
					  asm    mov al, 0x13
 | 
				
			||||||
 | 
					  asm    mov ah, 0x00
 | 
				
			||||||
 | 
					  asm    int 0x10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 LeeFuentes("leds.fnt");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 ok = 0;
 | 
				
			||||||
 | 
					 delayT = 1;
 | 
				
			||||||
 | 
					 while( !ok )
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					   if ( kbhit() )
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					    switch( getch() )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					     case 0:
 | 
				
			||||||
 | 
					      switch( getch() )
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					       case 75:
 | 
				
			||||||
 | 
					               P.AX--; if ( P.AX < 1 ) P.AX = 1;
 | 
				
			||||||
 | 
					               break;
 | 
				
			||||||
 | 
					       case 77:
 | 
				
			||||||
 | 
					               P.AX++; if ( P.AX > 40 ) P.AX = 40;
 | 
				
			||||||
 | 
					               break;
 | 
				
			||||||
 | 
					       case 72:
 | 
				
			||||||
 | 
					               P.AY--; if ( P.AY < 1 ) P.AY = 1;
 | 
				
			||||||
 | 
					               break;
 | 
				
			||||||
 | 
					       case 80:
 | 
				
			||||||
 | 
					               P.AY++; if ( P.AY > 40 ) P.AY = 40;
 | 
				
			||||||
 | 
					               break;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					     case '1':
 | 
				
			||||||
 | 
					              P.ndigitos--; if ( P.ndigitos < 1 ) P.ndigitos = 1;
 | 
				
			||||||
 | 
					              break;
 | 
				
			||||||
 | 
					     case '2':
 | 
				
			||||||
 | 
					              P.ndigitos++; if ( P.ndigitos > 40 ) P.ndigitos = 40;
 | 
				
			||||||
 | 
					              break;
 | 
				
			||||||
 | 
					     case '3':
 | 
				
			||||||
 | 
					              delayT--; if ( delayT < 1 ) delayT = 1;
 | 
				
			||||||
 | 
					              break;
 | 
				
			||||||
 | 
					     case '4':
 | 
				
			||||||
 | 
					              delayT++; if ( delayT > 40 ) delayT = 40;
 | 
				
			||||||
 | 
					              break;
 | 
				
			||||||
 | 
					     case  27:
 | 
				
			||||||
 | 
					              ok = 1;
 | 
				
			||||||
 | 
					              break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    memset( VidRam, 0, 64000 );
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   FuenteAmplia( "Esto es una prueba para ver la relaci<63>n del texto y el tama<6D>o de la muestra", &P );
 | 
				
			||||||
 | 
					   delay(delayT);
 | 
				
			||||||
 | 
					 };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 // Volvemos al modo texto
 | 
				
			||||||
 | 
					 asm    mov al, 0x03
 | 
				
			||||||
 | 
					 asm    mov ah, 0x00
 | 
				
			||||||
 | 
					 asm    int 0x10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 delete [] ptr_char;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user