home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 17 / CD_ASCQ_17_101194.iso / dos / prg / sphinx / examples / vga / ellipse.c__ < prev    next >
Encoding:
Text File  |  1994-02-13  |  3.1 KB  |  129 lines

  1. /*
  2.     C-- source code for ELLIPSE.COM, a VGA palette cycling demonstration.
  3.     Warning:  80386 or greater CPU required.
  4. */
  5.  
  6. ?print "Building ELLIPSE.COM\n"
  7. ?print "WARNING:  80386 or greater CPU required to execute!\n"
  8.  
  9. ?assumeDSSS TRUE     // assume SS is equal to DS at all times
  10. ?alignword  TRUE     // align word's and int's to even addresses
  11. ?use80386            // optimize code using 80386 instructions
  12.  
  13. ?include "KEYCODES.H--"
  14. ?include "VIDEO.H--"
  15. ?include "VGA.H--"
  16. ?include "VGA386.H--"
  17. ?include "WRITE.H--"
  18. ?include "RANDOM.H--"
  19. ?include "DOS.H--"
  20.  
  21. ?define CHANGE_RANGE   2      /* random range of palette change */
  22.  
  23. ?define PALSIZE    256*3    /* size of palette buffer 256 colours * RGB */
  24. byte palette[PALSIZE];      /* buffer for palette */
  25.  
  26. byte randvalue;
  27.  
  28. word xsize,ysize;
  29. ?define XMAX 320
  30. ?define YMAX 200
  31. byte color=66;
  32. word xloc,yloc;
  33. int xgo=1,ygo=1;
  34. byte speed=5;
  35. byte i;
  36. word count;
  37. byte squares;
  38.  
  39.  
  40.  
  41. main ()
  42. byte quit;
  43. {
  44. IF(byte GETCPU() < 3 )  /* check if 80386 instructions available */
  45.     {WRITESTR("80386 or greater CPU required.");
  46.     EXIT(-1);}
  47. @ SETVIDEOMODE( vid_320x200_256 );    /* set video mode */
  48. IF( byte @ GETVIDEOMODE() != vid_320x200_256)
  49.     {WRITESTR("Unable to enter 320x200 256 colour video mode.");
  50.     EXIT(-1);}
  51. @ GETVGAPALETTE( ,0,256,#palette);
  52.  
  53. @ RANDOMIZE();   /* seed the random number generator */
  54. quit = FALSE;
  55. newsettings();
  56. do {
  57.     i = 0;
  58.     do {
  59.         ellipse19_386(xloc+xsize,yloc+ysize,xsize,ysize,color);
  60. //      ellipse19_386(xloc+xsize,yloc+ysize,xsize-1,ysize-1,color);
  61. //      ellipse19_386(xloc+xsize,yloc+ysize,xsize+1,ysize+1,color);
  62. /*  Uncomment above two lines for more solid looking ellipses, at the
  63.     expense of speed.  */
  64.         color++;
  65.         IF( color == 0 )
  66.             color++;
  67.         xloc += xgo;
  68.         yloc += ygo;
  69.         IF( XMAX-xsize-xsize-1 <= xloc )
  70.             {-xgo;
  71.             xloc += xgo;}
  72.         IF( YMAX-ysize-ysize <= yloc )
  73.             {-ygo;
  74.             yloc += ygo;}
  75.         i++;
  76.         } while( i < speed );
  77.     @ COPYFAR(DS,#palette[3],DS,#palette[6],PALSIZE-6);
  78.     palette[PALSIZE-3] += RAND() % CHANGE_RANGE;
  79.     palette[PALSIZE-2] += RAND() % CHANGE_RANGE;
  80.     palette[PALSIZE-1] += RAND() % CHANGE_RANGE;
  81.  
  82.     @ WAITVSYNC();
  83.     @ SETVGADAC(0, ,PALSIZE, , ,#palette);
  84.     IF( @ KBHIT() != 0 )
  85.         quit = dokeys();
  86.     } while( quit == FALSE );
  87.  
  88. @ SETVIDEOMODE( vid_text80c );    /* return to text mode */
  89. WRITESTR("SPHINX Programming 1993");
  90. }
  91.  
  92.  
  93. byte dokeys()
  94. word key;
  95. byte ch;
  96. {key = BIOSREADKEY();
  97. ch = key;
  98. if( ch == '+' )
  99.     {if(speed < 50)
  100.         speed++;
  101.     }
  102. else if( ch == '-' )
  103.     {if(speed > 0)
  104.         speed--;
  105.     }
  106. ELSE IF( ch == ' ' )
  107.     {CLEARSCREEN19();
  108.     newsettings();
  109.     }
  110. ELSE IF( key == k_return )
  111.     newsettings();
  112. ELSE IF( key == k_esc )
  113.     return(TRUE);
  114. return(FALSE);
  115. }
  116.  
  117.  
  118. void newsettings()
  119. {squares = RAND() %4;
  120. ysize = RAND()%40 +1;       // xsize*20*4/32/3;
  121. xsize = RAND()%20 + ysize + 10;
  122. IF(xsize > 45)
  123.     squares = 0;
  124. xloc = XMAX /3;
  125. xloc += RAND() % 40;
  126. yloc = YMAX /2;
  127. }
  128.  
  129. /* end of ELLIPSE.C-- */