home *** CD-ROM | disk | FTP | other *** search
/ Game Developers Magazine 3 / GDM003.ZIP / PALDEMO.C < prev    next >
C/C++ Source or Header  |  1994-02-17  |  3KB  |  138 lines

  1. // PALDEMO.C - functions for demonstrating the VGA colour palette.
  2.  
  3. // Written by Phil Inch for Game Developers Magazine (issue 3).
  4. // Contributed to the public domain.
  5.  
  6. // This program written and compiled with Borland C++ v3.1
  7. // Compatibility with other compilers is not guaranteed.
  8.  
  9. // Usage of this program is subject to the disclaimer printed
  10. // in the magazine.  You assume all risks associated with the use
  11. // of this program.
  12.  
  13. // The box drawing routine used in this demo is also explained in issue
  14. // 3 of GDM, in the "VGA mode 13h" section.
  15.  
  16. #include <stdio.h>
  17. #include <conio.h>
  18. #include <time.h>
  19. #include <dos.h>
  20. #include <mem.h>
  21. #include <string.h>
  22. #include <stdlib.h>
  23. #include "palette.h"
  24.  
  25. char far *screen=MK_FP(0xA000,0);
  26.  
  27. void    SetGraphicsMode( void ) {
  28.     asm {
  29.         mov    ax,0x13
  30.     int    0x10
  31.       }
  32. }
  33.  
  34. void    SetTextMode( void ) {
  35.     asm {
  36.       mov    ax,0x03
  37.     int    0x10;
  38.     }
  39. }
  40.  
  41. void SetPoint( int X, int Y, int C ) {
  42.   *(screen+(Y*320)+X)=C;
  43. }
  44.  
  45. void FastBoxDraw(int x1, int y1, int x2, int y2, int color) {
  46.   int x,y;
  47.  
  48.   /* Top and bottom lines */
  49.   for ( x = x1; x < x2; x++ ) {
  50.       SetPoint( x, y1, color );
  51.       SetPoint( x, y2, color );
  52.       }
  53.  
  54.   /* Left and Right lines */
  55.   for ( y = y1; y < y2; y++ ) {
  56.       SetPoint( x1, y, color );
  57.       SetPoint( x2, y, color );
  58.       }
  59. }
  60.  
  61. void main( void ) {
  62.   int x1,y1,x2,y2,c,d;
  63.   char savepal[768];
  64.   char workpal[768];
  65.  
  66.   SetGraphicsMode();
  67.  
  68.   /* Save the default palette before we begin */
  69.   GetBlockPal( 1, &(savepal[0]), 255 );
  70.  
  71.   /* This will set all colours to zero */
  72.   memset( workpal, 0, 768 );
  73.   SetBlockPal( 1, &(workpal[0]), 255 );
  74.  
  75.   /* Now draw some different coloured boxes.  Because we've made the
  76.      pallete all black, we won't be able to see them yet */
  77.  
  78.   for ( d = 0; d < 500; d++ ) {
  79.     do {
  80.       x1 = rand()%320;
  81.       x2 = rand()%320;
  82.     } while ( x1 >= x2 );
  83.  
  84.     do {
  85.       y1 = rand()%200;
  86.       y2 = rand()%200;
  87.     } while ( y1 >= y2 );
  88.  
  89.     c = rand()%256;
  90.  
  91.     FastBoxDraw( x1, y1, x2, y2, c );
  92.     }
  93.  
  94.   /* Now "fade in" the image */
  95.   FadePaletteIn( &(savepal[0]) );
  96.   delay(1000);
  97.  
  98.   /* Set the whole palette to red */
  99.   for ( c = 0; c < 768; c+=3 ) {
  100.     workpal[c++] = 32;
  101.     workpal[c++] = 0;
  102.     workpal[c++] = 0;
  103.     }
  104.   SetBlockPal( 1, &(workpal[0]), 255 );
  105.   delay(1000);
  106.  
  107.   /* Set the whole palette to green */
  108.   for ( c = 0; c < 768; c+=3 ) {
  109.     workpal[c++] = 0;
  110.     workpal[c++] = 32;
  111.     workpal[c++] = 0;
  112.     }
  113.   SetBlockPal( 1, &(workpal[0]), 255 );
  114.   delay(1000);
  115.  
  116.   /* Set the whole palette to blue */
  117.   for ( c = 0; c < 768; c+=3 ) {
  118.     workpal[c++] = 0;
  119.     workpal[c++] = 0;
  120.     workpal[c++] = 32;
  121.     }
  122.   SetBlockPal( 1, &(workpal[0]), 255 );
  123.   delay(1000);
  124.  
  125.   /* Restore the original palette */
  126.   SetBlockPal( 1, &(savepal[0]), 255 );
  127.   delay(1000);
  128.  
  129.   /* Fade out the palette */
  130.   FadePaletteOut();
  131.   delay(1000);
  132.  
  133.   /* Restore the original palette before we leave */
  134.   SetBlockPal( 1, &(savepal[0]), 255 );
  135.  
  136.   SetTextMode();
  137. }
  138.