home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 17 / CD_ASCQ_17_101194.iso / dos / prg / sphinx / examples / vga / vgademo.c__ < prev    next >
Encoding:
Text File  |  1993-09-13  |  8.7 KB  |  369 lines

  1. /* 
  2.    SPHINX C-- example file
  3.    NAME:  VGADEMO.C--
  4.    DESCRIPTION:  This program demonstrates some of the stack graphics
  5.                  procedures for video mode 19.
  6.                  If run on a 386 or better machine, ellipses will also
  7.                  be demonstrated.
  8.    RUN FILE SIZE:  15672 bytes
  9. */
  10.  
  11. ? assumeDSSS  TRUE     /* enable DS == SS optimizations */
  12. ? resize      TRUE     /* resize program memory block to 64K */
  13. ? resizemessage "Error resizing program memory block."
  14.  
  15.  
  16. ?include "KEYCODES.H--"
  17. ?include "VIDEO.H--"
  18. ?include "VGA.H--"
  19. ?include "VGA386.H--"
  20. ?include "WRITE.H--"
  21. ?include "GWRITE.H--"
  22. ?include "VGAFONT.H--"
  23. ?include "RANDOM.H--"
  24. ?include "DOS.H--"
  25.  
  26. byte palette = FROM "PETER.PAL";  // insert palette file into run file
  27. byte peter = FROM "PETER.CUT";  // insert image file into run file
  28.  
  29. ?define YADD  16
  30.  
  31. byte stars = " ****** ";
  32. byte sphinx = "SPHINX Programming 1993";
  33.  
  34. byte cpu;  /* used to store machine CPU type */
  35.  
  36. byte options = "  <A> - putpixel19(x,y,colour);\n"
  37.                "  <B> - xorpixel19(x,y,colour);\n\n"
  38.                "  <C> - bar19(x,y,xsize,ysize,colour);\n"
  39.                "  <D> - xorbar19(x,y,xsize,ysize,color);"
  40.                "  <E> - box19(x,y,xsize,ysize,colour);\n"
  41.                "  <F> - xorbox19(x,y,xsize,ysize,color);\n"
  42.                "  <G> - putimage19(x,y,imagebuffer);\n"
  43.                "  <H> - xorimage19(x,y,imagebuffer);\n"
  44.                "  <I> - putresized19(x,y,xs,ys,image);\n\n"
  45.                "  <J> - line19(x1,y1,x2,y2,colour);\n"
  46.                "  <K> - xorline19(x1,y1,x2,y2,colour);\n\n"
  47.                "  <L> - over5x5str19(x,y,str,colour);\n"
  48.                "  <M> - put5x5str19(x,y,str,fgc,bgc);\n\n";
  49.  
  50. void displayoptions ()
  51. {
  52. clearscreen();
  53. GOTOXY(0,0);
  54. GWRITESTR(#stars,67);
  55. GWRITESTR(#sphinx,222);
  56. GWRITESTR(#stars,67);
  57. GOTOXY(5,1);
  58. GWRITESTR("C-- VGA Mode 19 Graphics Demo\n\n",5);
  59. GWRITESTR(" <KEY>- Corresponding Procedure Demo\n",111);
  60. GWRITESTR(#options,9);
  61. IF( cpu >= 3 )
  62.     GWRITESTR("  <N> - ellipse19_386(x,y,xs,ys,colour);",9);
  63. WRITELN();
  64. GWRITESTR(" <ESC> - QUIT demo of C-- graphics",9);
  65. }
  66.  
  67.  
  68. main ()
  69. byte quit,redraw;
  70. {
  71. SETVIDEOMODE( vid_320x200_256 );
  72. IF(byte GETVIDEOMODE() <> vid_320x200_256)
  73.     {WRITESTR("Unable to enter 320x200 256 colour mode.  VGA required.");
  74.     EXIT(1);           /* exit program with error code of 1 */
  75.     }
  76.  
  77. SETVGAPALETTE( ,0,256,#palette);
  78.  
  79. cpu = GETCPU();  /* get the CPU type */
  80.  
  81. quit = FALSE;
  82. redraw = TRUE;
  83.  
  84. do {
  85.    IF( redraw == TRUE )
  86.        displayoptions();
  87.    redraw = TRUE;
  88.    AX = BIOSREADKEY();
  89.    IF( AL >= 'a' )
  90.        IF( AL <= 'z' )
  91.            AL -= 'a'-'A';   // make the letter upper case
  92.    IF( AL == 'A' )
  93.        putpixeldemo(FALSE);
  94.    else IF( AL == 'B' )
  95.        putpixeldemo(TRUE);
  96.    else IF( AL == 'C' )
  97.        bardemo(FALSE);
  98.    else IF( AL == 'D' )
  99.        bardemo(TRUE);
  100.    else IF( AL == 'E' )
  101.        boxdemo(FALSE);
  102.    else IF( AL == 'F' )
  103.        boxdemo(TRUE);
  104.    else IF( AL == 'G' )
  105.        putimagedemo();
  106.    ELSE IF( AL == 'H' )
  107.        {xorimagedemo();
  108.        redraw = FALSE;
  109.        }
  110.    ELSE IF( AL == 'I' )
  111.        {IF( word RAND()%100 >= 50 )
  112.            putresizeddemo2();
  113.        ELSE putresizeddemo();
  114.        }
  115.    ELSE IF( AL == 'J' )
  116.        linedemo(FALSE);
  117.    ELSE IF( AL == 'K' )
  118.        linedemo(TRUE);
  119.    ELSE IF( AL == 'L' )
  120.        fontdemo(FALSE);
  121.    ELSE IF( AL == 'M' )
  122.        fontdemo(TRUE);
  123.    ELSE IF( AL == 'N' )
  124.        ellipsedemo();
  125.    ELSE IF( AX == k_esc )
  126.        quit = TRUE;
  127.    ELSE{BEEP();
  128.        redraw = FALSE;
  129.        }
  130.  
  131.    } while( quit == FALSE );
  132.  
  133. SETVIDEOMODE( vid_text80c );
  134. WRITESTR(#sphinx);
  135. }
  136.  
  137.  
  138. void putpixeldemo ( byte xorflag )
  139. byte i,stop;
  140. {stop = FALSE;
  141. do {
  142.     IF( xorflag )
  143.         xorpixel19(RAND()%320,RAND()%184+YADD,i);
  144.     ELSE putpixel19(RAND()%320,RAND()%184+YADD,i);
  145.     i++;
  146.     IF( KBHIT() )
  147.         {AX = BIOSREADKEY();
  148.         IF( AX == k_space )
  149.             clearscreen();
  150.         ELSE IF( AX == k_return )
  151.             BIOSREADKEY();
  152.         ELSE stop = TRUE;
  153.         }
  154.     } while( stop == FALSE );
  155. }
  156.  
  157.  
  158. void bardemo ( byte xorflag )
  159. byte stop;
  160. {stop = FALSE;
  161. do {
  162.     IF( xorflag )
  163.         xorbar19(RAND()%250,RAND()%134+YADD,70,50,RAND());
  164.     ELSE bar19(RAND()%250,RAND()%134+YADD,70,50,RAND());
  165.     IF( KBHIT() )
  166.         {AX = BIOSREADKEY();
  167.         IF( AX == k_space )
  168.             clearscreen();
  169.         ELSE IF( AX == k_return )
  170.             BIOSREADKEY();
  171.         ELSE stop = TRUE;
  172.         }
  173.     } while( stop == FALSE );
  174. }
  175.  
  176.  
  177. void boxdemo ( byte xorflag )
  178. byte stop;
  179. {stop = FALSE;
  180. do {
  181.     IF( xorflag )
  182.         xorbox19(RAND()%250,RAND()%134+YADD,70,50,RAND());
  183.     ELSE box19(RAND()%250,RAND()%134+YADD,70,50,RAND());
  184.     IF( KBHIT() )
  185.         {AX = BIOSREADKEY();
  186.         IF( AX == k_space )
  187.             clearscreen();
  188.         ELSE IF( AX == k_return )
  189.             BIOSREADKEY();
  190.         ELSE stop = TRUE;
  191.         }
  192.     } while( stop == FALSE );
  193. }
  194.  
  195.  
  196. void putimagedemo ()
  197. byte stop;
  198. word xmod,ymod;
  199. {stop = FALSE;
  200. xmod = 320-DSWORD[#peter[0]];
  201. ymod = 200-YADD-DSWORD[#peter[2]];
  202. do {
  203.     putimage19(RAND()%xmod,RAND()%ymod+YADD,#peter);
  204.     IF( KBHIT() )
  205.         {AX = BIOSREADKEY();
  206.         IF( AX == k_space )
  207.             clearscreen();
  208.         ELSE IF( AX == k_return )
  209.             BIOSREADKEY();
  210.         ELSE stop = TRUE;
  211.         }
  212.     } while( stop == FALSE );
  213. }
  214.  
  215.  
  216. void xorimagedemo ()
  217. byte stop;
  218. word xmod,ymod;
  219. word x,y;
  220. {stop = FALSE;
  221. xmod = 320-DSWORD[#peter[0]];
  222. ymod = 200-DSWORD[#peter[2]];
  223. x = 0;
  224. y = 0;
  225. xorimage19(x,y,#peter);
  226. do {
  227.     xorimage19(x,y,#peter);
  228.     x = RAND()%xmod;
  229.     y = RAND()%ymod;
  230.     xorimage19(x,y,#peter);
  231.     IF( KBHIT() )
  232.         {AX = BIOSREADKEY();
  233.         IF( AX == k_return )
  234.             BIOSREADKEY();
  235.         ELSE IF( AX != k_space )
  236.             stop = TRUE;
  237.         }
  238.     } while( stop == FALSE );
  239. xorimage19(x,y,#peter);
  240. }
  241.  
  242.  
  243. void putresizeddemo ()
  244. byte stop;
  245. word count,xcenter,ycenter,maxsize;
  246. {stop = FALSE;
  247. count = 1;
  248. xcenter = 160;
  249. ycenter = 100;
  250. maxsize = 70;
  251. do {ES = 0xA000;
  252.     putresized19(xcenter-count,ycenter-count,count+count,count+count,#peter);
  253.     IF( KBHIT() )
  254.         {AX = BIOSREADKEY();
  255.         IF( AX == k_space )
  256.             clearscreen();
  257.         ELSE IF( AX == k_return )
  258.             BIOSREADKEY();
  259.         ELSE stop = TRUE;
  260.         }
  261.     count++;
  262.     IF( count > maxsize )
  263.         {xcenter = RAND()%200 +60;
  264.         ycenter = RAND()%64 +YADD+60;
  265.         count = 1;
  266.         maxsize = RAND()%55+5;}
  267.     } while( stop == FALSE );
  268. }
  269.  
  270.  
  271. void putresizeddemo2 ()
  272. byte stop;
  273. {stop = FALSE;
  274. do {
  275.     putresized19(RAND()%210,RAND()%84+YADD,RAND()%105+5,RAND()%96+5,#peter);
  276.     IF( KBHIT() )
  277.         {AX = BIOSREADKEY();
  278.         IF( AX == k_space )
  279.             clearscreen();
  280.         ELSE IF( AX == k_return )
  281.             BIOSREADKEY();
  282.         ELSE stop = TRUE;
  283.         }
  284.     } while( stop == FALSE );
  285. }
  286.  
  287.  
  288. void linedemo ( byte xorflag )
  289. byte stop;
  290. {stop = FALSE;
  291. do {
  292.     IF( xorflag == TRUE )
  293.         xorline19(RAND()%320,RAND()%184+YADD,RAND()%320,RAND()%184+YADD,RAND());
  294.     ELSE line19(RAND()%320,RAND()%184+YADD,RAND()%320,RAND()%184+YADD,RAND());
  295.     IF( KBHIT() )
  296.         {AX = BIOSREADKEY();
  297.         IF( AX == k_space )
  298.             clearscreen();
  299.         ELSE IF( AX == k_return )
  300.             BIOSREADKEY();
  301.         ELSE stop = TRUE;
  302.         }
  303.     } while( stop == FALSE );
  304. }
  305.  
  306.  
  307. void fontdemo (byte putflag)
  308. byte stop;
  309. {stop = FALSE;
  310. do {
  311.     IF( putflag )
  312.         put5x5str19(RAND()%182,RAND()%179+YADD,#sphinx,RAND(),RAND());
  313.     ELSE over5x5str19(RAND()%182,RAND()%179+YADD,#sphinx,RAND());
  314.     IF( KBHIT() )
  315.         {AX = BIOSREADKEY();
  316.         IF( AX == k_space )
  317.             clearscreen();
  318.         ELSE IF( AX == k_return )
  319.             BIOSREADKEY();
  320.         ELSE stop = TRUE;
  321.         }
  322.     } while( stop == FALSE );
  323. }
  324.  
  325.  
  326. ?define XMODER  320-31-31
  327. ?define YMODER  200-16-16-YADD
  328.  
  329. void ellipsedemo ()
  330. byte stop;
  331. {IF( cpu < 3 )
  332.     {BEEP();
  333.     return();
  334.     }
  335. stop = FALSE;
  336. do {
  337.     ellipse19_386(RAND()%XMODER+31,RAND()%YMODER+16+YADD,31,16,RAND());
  338.     IF( KBHIT() )
  339.         {AX = BIOSREADKEY();
  340.         IF( AX == k_space )
  341.             clearscreen();
  342.         ELSE IF( AX == k_return )
  343.             BIOSREADKEY();
  344.         ELSE{stop = TRUE;
  345.             clearscreen();
  346.             }
  347.         }
  348.     } while( stop == FALSE );
  349. }
  350.  
  351.  
  352. void clearscreen ()   // clear the part of screen below title
  353. {
  354. ES = 0xA000;
  355. DI = 5120;
  356. IF( cpu < 3 )
  357.     {CX = 29440;
  358.     AX = 0;
  359.     $ REPZ
  360.     $ STOSW
  361.     }
  362. ELSE{CX = 29440/2;
  363.     EAX = 0;
  364.     $ REPZ
  365.     $ STOSD
  366.     }
  367. }
  368.  
  369. /* end of C--GDEMO.C-- */