#include #include #include #include #include #define ERROR 1 #define OK 1 typedef unsigned char DacPalette256[256][3]; void setvgapalette256(DacPalette256 *PalBuf); DacPalette256 Palette256; void InicializaSVGA(void); extern int far _Cdecl Svga256_fdriver[]; int huge DetectVGA256(){ return 2; } int MuestraImagen( char *file ); int CargaPaleta(char *file ); void main( void ) { int index, salida; // Inicializamos el modo SVGA 640*480 256 c. ( VESA ) InicializaSVGA(); MuestraImagen( "DEMO.PCX" ); while( !kbhit() ); salida = 0; for( ; salida == 0; ) { for (index=0; index<256; index++) { // set components if( Palette256[index][0]>0 ) Palette256[index][0]--; if( Palette256[index][1]>0 ) Palette256[index][1] --; if( Palette256[index][2]>0 ) Palette256[index][2] --; if( Palette256[index][0]==0 && Palette256[index][1]==0 && Palette256[index][2]==0 ) salida = 1; else salida = 0; } // end for index setvgapalette256( &Palette256 ); delay(50); } closegraph(); } #define RES_X 640 #define RES_Y 480 /**************************************************************************\ |* *| |* MuestraImagen *| |* *| |* Descripci¢n: *| |* Descomprime y copia a la pagina indicada un PCX *| |* *| |* Entradas: nombre de la imagen *| |* *| |* *| |* Salidas: OK Todo ha ido bien *| |* ERROR Algo va mal *| |* *| \**************************************************************************/ int MuestraImagen( char *file ) { int alto, ancho, contador; unsigned char byte; FILE *fp; CargaPaleta( file ); if ( (fp = fopen( file,"rb")) != NULL ) { // Saltamos la cabecera fseek( fp, 128, SEEK_SET ); for(alto=0; alto0; contador--) { putpixel (ancho, alto, byte); ancho++; } } } } fclose(fp); } else return ERROR; return OK; } /**************************************************************************\ |* *| |* CargaPaleta *| |* *| |* Descripci¢n: *| |* Carga la paleta con los colores por defecto *| |* *| |* *| |* Entradas: achivo PCX de donde cargar la paleta *| |* *| |* Salidas: OK Todo ha ido bien *| |* ERROR Algo va mal *| |* *| \**************************************************************************/ int CargaPaleta(char *file ) { int index; FILE *fp; if ( (fp=fopen( file, "rb" ) ) == NULL ) return ERROR; if ( fseek( fp, -768L, SEEK_END ) == 0 ) { for (index=0; index<256; index++) { // get the red component // get the green component // get the blue component // set components Palette256[index][0] = (getc(fp) >> 2)*64 / 256; Palette256[index][1] = (getc(fp) >> 2)*64 / 256; Palette256[index][2] = (getc(fp) >> 2)*64 / 256; } // end for index } setvgapalette256( &Palette256 ); fclose( fp ); return OK; } /* Setvgapalette256 sets the entire 256 color palette */ /* PalBuf contains RGB values for all 256 colors */ /* R,G,B values range from 0 to 63 */ /* Usage: */ /* DacPalette256 dac256; */ /* */ /* setvgapalette256(&dac256); */ void setvgapalette256(DacPalette256 *PalBuf) { struct REGPACK reg; reg.r_ax = 0x1012; reg.r_bx = 0; reg.r_cx = 256; reg.r_es = FP_SEG(PalBuf); reg.r_dx = FP_OFF(PalBuf); intr(0x10,®); } void InicializaSVGA(void) { int Gd = DETECT, Gm; int Drv, errorcode; installuserdriver("Svga256",DetectVGA256); // registerfarbgidriver(Svga256_fdriver); initgraph(&Gd,&Gm,""); /* read result of initialization */ errorcode = graphresult(); if (errorcode != grOk) /* an error occurred */ { cprintf("Graphics error: %s\n", grapherrormsg(errorcode)); cprintf("Presione una tecla para finalizar:"); getch(); exit(1); /* return with error code */ } }