home *** CD-ROM | disk | FTP | other *** search
/ Bila Vrana / BILA_VRANA.iso / 007A / SVGACC24.ZIP / SVGADEM1.C < prev    next >
Text File  |  1996-01-30  |  38KB  |  1,443 lines

  1. /****************************************************************************
  2.  
  3.       'SVGACC' A Super Vga Graphics Library for use with Microsoft compatible
  4.       C/C++ compilers
  5.       Copyright 1993-1996 by Stephen L. Balkum and Daniel A. Sill
  6.  
  7.     **************** UNREGISTERD SHAREWARE VERSION ***********************
  8.     * FOR EVUALATION ONLY. NOT FOR RESALE IN ANY FORM. SOFTWARE WRITTEN  *
  9.     * USING THIS UNREGISTERED SHAREWARE GRAPHICS LIBRARY MAY NOT BY SOLD *
  10.     * OR USED FOR ANY PURPOSE OTHER THAN THE EVUALTION OF THIS LIBRARY.  *
  11.     **********************************************************************
  12.  
  13.     **************** NO WARRANTIES AND NO LIABILITY **********************
  14.     * Stephen L. Balkum and Daniel A. Sill provide no warranties, either *
  15.     * expressed or implied, of merchantability, or fitness, for a        *
  16.     * particular use or purpose of this SOFTWARE and documentation.      *
  17.     * In no event shall Stephen L. Balkum or Daniel A. Sill be held      *
  18.     * liable for any damages resulting from the use or misuse of the     *
  19.     * SOFTWARE and documentation.                                        *
  20.     **********************************************************************
  21.  
  22.     ************** U.S. GOVERNMENT RESTRICTED RIGHTS *********************
  23.     * Use, duplication, or disclosure of the SOFTWARE and documentation  *
  24.     * by the U.S. Government is subject to the restictions as set forth  *
  25.     * in subparagraph (c)(1)(ii) of the Rights in Technical Data and     *
  26.     * Computer Software cluse at DFARS 252.227-7013.                     *
  27.     * Contractor/manufacturer is Stephen L. Balkum and Daniel A. Sill,   *
  28.     * P.O. Box 7704, Austin, Texas 78713-7704                            *
  29.     **********************************************************************
  30.  
  31.     **********************************************************************
  32.     * By using this SOFTWARE or documentation, you agree to the above    *
  33.     * terms and conditions.                                              *
  34.     **********************************************************************
  35.  
  36.  ***************************************************************************/
  37.  
  38. #define MODULE
  39.  
  40. #include <stdio.h>
  41. #include <conio.h>
  42. #include <stdlib.h>
  43. #include <malloc.h>
  44. #include <string.h>
  45. #include <math.h>
  46.  
  47. #include "svgacc.h"
  48. #include "svgademo.h"
  49.  
  50. #define randnum(size) (rand() % (int)(size))
  51.  
  52. /***********
  53.  * DOBLOCK *
  54.  ***********/
  55.  
  56. char doblock(void)
  57. {
  58.     int i, colr;
  59.     int xinc, yinc, x1, y1, x2, y2;
  60.     int cntx, cnty;
  61.     char ret;
  62.     char title[TITLEN];
  63.     char buf[TITLEN];
  64.     RasterBlock far *gfxblk;
  65.     RasterBlock far *gfxblk2;
  66.     RasterBlock far *spritebkgnd;
  67.  
  68.     /*
  69.      * Set up the Title
  70.      */
  71.     sprintf(title,"DEMO 5: Block function and Sprites");
  72.     palset(pal,0,255);
  73.  
  74.     /*
  75.      * Show Block Get (draw some circles and "get a chunk of them")
  76.      */
  77.  
  78.     fillscreen(0);
  79.     setview(0,0,maxx,maxy);
  80.     drwstring(SET,7,0,title,10,0);
  81.     sprintf(buf,"blkget(x1,y1,x2,y2,GfxBlock);");
  82.     drwstring(SET,7,0,buf,10,16);
  83.     colr = 16;
  84.     for(i=0;i<=maxx/2;i++) {
  85.         drwcircle(SET,colr,maxx/4+i,maxy/2,maxy/5);
  86.         colr+=2;
  87.         if(colr>255)
  88.             colr = 16;
  89.     }
  90.  
  91.     xinc = maxx/20;
  92.     yinc = maxy/20;
  93.     x1 = maxx/2-xinc;
  94.     y1 = maxy/2-yinc;
  95.     x2 = maxx/2+xinc;
  96.     y2 = maxy/2+yinc;
  97.     i = (x2-x1+1)*(y2-y1+1)+4;
  98.     gfxblk = _fmalloc(i);
  99.     if (!gfxblk) {
  100.         restext();
  101.         printf("ERROR: Allocating memory for gfxblk: %d bytes\n",i);
  102.         exit(1);
  103.     }
  104.     drwbox(SET,0,x1,y1,x2,y2);
  105.     blkget(x1,y1,x2,y2,gfxblk);
  106.  
  107.     ret = getkey();
  108.     if ((ret == 's') || (ret == 'q')) {
  109.         fillscreen(0);
  110.         _ffree(gfxblk);
  111.         return(ret);
  112.     }
  113.  
  114.     /*
  115.      * Show Block Rotate and Sprite Stuff
  116.      */
  117.     drwstring(SET,7,0,title,10,0);
  118.     sprintf(buf,"blkrotate(angle,backfill,GfxBlockSrc,GfxBlockDst);");
  119.     drwstring(SET,7,0,buf,10,16);
  120.     sprintf(buf,"spritegap(transcolor,x,y,SpriteArray,BkGndArray);");
  121.     drwstring(SET,7,0,buf,10,32);
  122.     sprintf(buf,"spriteput(transcolor,x,y,SpriteArray);");
  123.     drwstring(SET,7,0,buf,10,48);
  124.     cntx = (x2-x1) / 2 + x1;
  125.     cnty = (y2-y1) / 2 + y1;
  126.     fillarea(x1+2,y1+2,0,0);
  127.     i = blkrotatesize(45,gfxblk);
  128.     spritebkgnd = _fmalloc(i);
  129.     if (!spritebkgnd) {
  130.         restext();
  131.         printf("ERROR: Allocating memory for spritebkgnd: %d bytes\n",i);
  132.         exit(1);
  133.     }
  134.     gfxblk2 = _fmalloc(i);
  135.     if (!gfxblk2) {
  136.         restext();
  137.         printf("ERROR: Allocating memory for gfxblk2: %d bytes\n",i);
  138.         exit(1);
  139.     }
  140.     blkget(x1,y1,x2,y2,spritebkgnd);
  141.     setview(0,64,maxx,maxy);
  142.  
  143.     for(i=0;i<=360;i+=4) {
  144.         blkrotate(i,1,gfxblk,gfxblk2);
  145.         spriteput(SET,1,cntx-(spritebkgnd->width)/2,cnty-(spritebkgnd->height)/2,spritebkgnd);
  146.         spritegap(1,cntx-(gfxblk2->width)/2,cnty-(gfxblk2->height)/2,gfxblk2,spritebkgnd);
  147.         sdelay(4);
  148.     }
  149.     spriteput(SET,1,cntx-(spritebkgnd->width)/2,cnty-(spritebkgnd->height)/2,spritebkgnd);
  150.     blkput(SET,x1,y1,gfxblk);
  151.  
  152.     setview(0,0,maxx,maxy);
  153.     ret = getkey();
  154.     if ((ret == 's') || (ret == 'q')) {
  155.         fillscreen(0);
  156.         palset(pal,16,255);
  157.         _ffree(gfxblk);
  158.         _ffree(gfxblk2);
  159.         _ffree(spritebkgnd);
  160.         return(ret);
  161.     }
  162.  
  163.     /*
  164.      * Show Block Resize and Sprite Stuff
  165.      */
  166.     drwstring(SET,7,0,title,10,0);
  167.     sprintf(buf,"blkresize(Width,Height,GfxBlockSrc,GfxBlockDst);");
  168.     drwstring(SET,7,0,buf,10,16);
  169.     sprintf(buf,"spritegap(transcolor,x,y,SpriteArray,BkGndArray);");
  170.     drwstring(SET,7,0,buf,10,32);
  171.     sprintf(buf,"spriteput(transcolor,x,y,SpriteArray);");
  172.     drwstring(SET,7,0,buf,10,48);
  173.     fillarea(x1+2,y1+2,0,0);
  174.     blkget(x1,y1,x2,y2,spritebkgnd);
  175.     setview(0,64,maxx,maxy);
  176.  
  177.     i = (x2-x1+1+xinc)*(y2-y1+1+xinc)+4;
  178.  
  179.     spritebkgnd = _frealloc(spritebkgnd,i);
  180.     if (!spritebkgnd) {
  181.         restext();
  182.         printf("ERROR: reallocating memory for spritebkgnd: %d bytes\n",i);
  183.         exit(1);
  184.     }
  185.  
  186.     gfxblk2 = _frealloc(gfxblk2,i);
  187.     if (!gfxblk2) {
  188.         restext();
  189.         printf("ERROR: reallocating memory for gfxblk2: %d bytes\n",i);
  190.         exit(1);
  191.     }
  192.  
  193.     for(i=0;i<=xinc;i++) {
  194.         blkresize((gfxblk->width)-i,(gfxblk->height)-i,gfxblk,gfxblk2);
  195.         spriteput(SET,1,cntx-(spritebkgnd->width)/2,cnty-(spritebkgnd->height)/2,spritebkgnd);
  196.         spritegap(1,cntx-(gfxblk2->width)/2,cnty-(gfxblk2->height)/2,gfxblk2,spritebkgnd);
  197.         sdelay(3);
  198.     }
  199.     spriteput(SET,1,cntx-(spritebkgnd->width)/2,cnty-(spritebkgnd->height)/2,spritebkgnd);
  200.  
  201.     for(i=xinc;i>=0;i--) {
  202.         blkresize((gfxblk->width)-i,(gfxblk->height)-i,gfxblk,gfxblk2);
  203.         spriteput(SET,1,cntx-(spritebkgnd->width)/2,cnty-(spritebkgnd->height)/2,spritebkgnd);
  204.         spritegap(1,cntx-(gfxblk2->width)/2,cnty-(gfxblk2->height)/2,gfxblk2,spritebkgnd);
  205.         sdelay(3);
  206.     }
  207.     spriteput(SET,1,cntx-(spritebkgnd->width)/2,cnty-(spritebkgnd->height)/2,spritebkgnd);
  208.     blkput(SET,x1,y1,gfxblk);
  209.  
  210.     ret = getkey();
  211.     if ((ret == 's') || (ret == 'q')) {
  212.         fillscreen(0);
  213.         palset(pal,16,255);
  214.         setview(0,0,maxx,maxy);
  215.         _ffree(gfxblk);
  216.         _ffree(gfxblk2);
  217.         _ffree(spritebkgnd);
  218.         return(ret);
  219.     }
  220.  
  221.  
  222.     /*
  223.      * Show Block Put (put the "chunks" randomly around the screen)
  224.      */
  225.     setview(0,16,maxx,32);
  226.     fillview(0);
  227.     sprintf(buf,"blkput(mode,x,y,GfxBlock);");
  228.     drwstring(SET,7,0,buf,10,16);
  229.     xinc = maxx/10;
  230.     yinc = maxy/10;
  231.     setview(0,32,maxx,maxy);
  232.     for(i=0;i<=maxx/2;i++) {
  233.         x1 = randnum(maxx + xinc) - xinc;
  234.         y1 = randnum(maxy + yinc) - yinc;
  235.         blkput(SET,x1,y1,gfxblk);
  236.     }
  237.  
  238.     _ffree(gfxblk);
  239.     _ffree(gfxblk2);
  240.     _ffree(spritebkgnd);
  241.     setview(0,0,maxx,maxy);
  242.     ret = getkey();
  243.     if ((ret == 's') || (ret == 'q')) {
  244.         fillscreen(0);
  245.         return(ret);
  246.     }
  247.  
  248.     return(ret);
  249.