SVGADEM1.C
资源名称:SVGACC10.zip [点击查看]
上传用户:kammenn
上传日期:2007-06-26
资源大小:210k
文件大小:24k
源码类别:
GDI/图象编程
开发平台:
C/C++
- /****************************************************************************
- 'SVGACC' A Super Vga Graphics Library for use with Microsoft and
- Borland C/C++
- Copyright 1993-1994 by Stephen L. Balkum and Daniel A. Sill
- GIF and 'Graphics Intechange Format' are trademarks (tm) of
- Compuserve, Incorporated, an H&R Block Company.
- **************** UNREGISTERD SHAREWARE VERSION ***********************
- * FOR EVUALATION ONLY. NOT FOR RESALE IN ANY FORM. SOFTWARE WRITTEN *
- * USING THIS UNREGISTERED SHAREWARE GRAPHICS LIBRARY MAY NOT BY SOLD *
- * OR USED FOR ANY PURPOSE OTHER THAN THE EVUALTION OF THIS LIBRARY. *
- **********************************************************************
- **************** NO WARRANTIES AND NO LIABILITY **********************
- * Stephen L. Balkum and Daniel A. Sill provide no warranties, either *
- * expressed or implied, of merchantability, or fitness, for a *
- * particular use or purpose of this SOFTWARE and documentation. *
- * In no event shall Stephen L. Balkum or Daniel A. Sill be held *
- * liable for any damages resulting from the use or misuse of the *
- * SOFTWARE and documentation. *
- **********************************************************************
- ************** U.S. GOVERNMENT RESTRICTED RIGHTS *********************
- * Use, duplication, or disclosure of the SOFTWARE and documentation *
- * by the U.S. Government is subject to the restictions as set forth *
- * in subparagraph (c)(1)(ii) of the Rights in Technical Data and *
- * Computer Software cluse at DFARS 252.227-7013. *
- * Contractor/manufacturer is Stephen L. Balkum and Daniel A. Sill, *
- * P.O. Box 7704, Austin, Texas 78713-7704 *
- **********************************************************************
- **********************************************************************
- * By using this SOFTWARE or documentation, you agree to the above *
- * terms and conditions. *
- **********************************************************************
- ***************************************************************************/
- #define MODULE
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- #include <malloc.h>
- #include <string.h>
- #include <math.h>
- #include "svgacc.h"
- #include "svgademo.h"
- #define randnum(size) (rand() % (int)(size))
- /***********
- * DOBLOCK *
- ***********/
- char doblock(void)
- {
- int i, colr;
- int xinc, yinc, x1, y1, x2, y2;
- int cntx, cnty;
- char ret;
- char title[TITLEN];
- char buf[TITLEN];
- RasterBlock far *gfxblk;
- RasterBlock far *gfxblk2;
- RasterBlock far *spritebkgnd;
- /*
- * Set up the Title
- */
- sprintf(title,"DEMO 5: Block function and Sprites");
- palset(pal,0,255);
- /*
- * Show Block Get (draw some circles and "get a chunk of them")
- */
- fillscreen(0);
- setview(0,0,maxx,maxy);
- drwstring(1,7,0,title,10,0);
- sprintf(buf,"blkget(x1,y1,x2,y2,GfxBlock);");
- drwstring(1,7,0,buf,10,16);
- colr = 16;
- for(i=0;i<=maxx/2;i++) {
- drwcircle(1,colr,maxx/4+i,maxy/2,maxy/5);
- colr+=2;
- if(colr>255)
- colr = 16;
- }
- xinc = maxx/20;
- yinc = maxy/20;
- x1 = maxx/2-xinc;
- y1 = maxy/2-yinc;
- x2 = maxx/2+xinc;
- y2 = maxy/2+yinc;
- i = (x2-x1+1)*(y2-y1+1)+4;
- gfxblk = _fmalloc(i);
- if (!gfxblk) {
- restext();
- printf("ERROR: Allocating memory for gfxblk: %d bytesn",i);
- exit(1);
- }
- drwbox(1,0,x1,y1,x2,y2);
- blkget(x1,y1,x2,y2,gfxblk);
- ret = getkey();
- if ((ret == 's') || (ret == 'q')) {
- fillscreen(0);
- _ffree(gfxblk);
- return(ret);
- }
- /*
- * Show Block Rotate and Sprite Stuff
- */
- drwstring(1,7,0,title,10,0);
- sprintf(buf,"blkrotate(angle,backfill,GfxBlockSrc,GfxBlockDst);");
- drwstring(1,7,0,buf,10,16);
- sprintf(buf,"spritegap(transcolor,x,y,SpriteArray,BkGndArray);");
- drwstring(1,7,0,buf,10,32);
- sprintf(buf,"spriteput(transcolor,x,y,SpriteArray);");
- drwstring(1,7,0,buf,10,48);
- cntx = (x2-x1) / 2 + x1;
- cnty = (y2-y1) / 2 + y1;
- fillarea(x1+2,y1+2,0,0);
- i = blkrotatesize(45,gfxblk);
- spritebkgnd = _fmalloc(i);
- if (!spritebkgnd) {
- restext();
- printf("ERROR: Allocating memory for spritebkgnd: %d bytesn",i);
- exit(1);
- }
- gfxblk2 = _fmalloc(i);
- if (!gfxblk2) {
- restext();
- printf("ERROR: Allocating memory for gfxblk2: %d bytesn",i);
- exit(1);
- }
- blkget(x1,y1,x2,y2,spritebkgnd);
- setview(0,64,maxx,maxy);
- for(i=0;i<=360;i+=4) {
- blkrotate(i,1,gfxblk,gfxblk2);
- spriteput(SET,1,cntx-(spritebkgnd->width)/2,cnty-(spritebkgnd->height)/2,spritebkgnd);
- spritegap(1,cntx-(gfxblk2->width)/2,cnty-(gfxblk2->height)/2,gfxblk2,spritebkgnd);
- sdelay(4);
- }
- spriteput(SET,1,cntx-(spritebkgnd->width)/2,cnty-(spritebkgnd->height)/2,spritebkgnd);
- blkput(SET,x1,y1,gfxblk);
- setview(0,0,maxx,maxy);
- ret = getkey();
- if ((ret == 's') || (ret == 'q')) {
- fillscreen(0);
- palset(pal,16,255);
- _ffree(gfxblk);
- _ffree(gfxblk2);
- _ffree(spritebkgnd);
- return(ret);
- }
- /*
- * Show Block Resize and Sprite Stuff
- */
- drwstring(1,7,0,title,10,0);
- sprintf(buf,"blkresize(Width,Height,GfxBlockSrc,GfxBlockDst);");
- drwstring(1,7,0,buf,10,16);
- sprintf(buf,"spritegap(transcolor,x,y,SpriteArray,BkGndArray);");
- drwstring(1,7,0,buf,10,32);
- sprintf(buf,"spriteput(transcolor,x,y,SpriteArray);");
- drwstring(1,7,0,buf,10,48);
- fillarea(x1+2,y1+2,0,0);
- blkget(x1,y1,x2,y2,spritebkgnd);
- setview(0,64,maxx,maxy);
- i = (x2-x1+1+xinc)*(y2-y1+1+xinc)+4;
- spritebkgnd = _frealloc(spritebkgnd,i);
- if (!spritebkgnd) {
- restext();
- printf("ERROR: reallocating memory for spritebkgnd: %d bytesn",i);
- exit(1);
- }
- gfxblk2 = _frealloc(gfxblk2,i);
- if (!gfxblk2) {
- restext();
- printf("ERROR: reallocating memory for gfxblk2: %d bytesn",i);
- exit(1);
- }
- for(i=0;i<=xinc;i++) {
- blkresize((gfxblk->width)-i,(gfxblk->height)-i,gfxblk,gfxblk2);
- spriteput(SET,1,cntx-(spritebkgnd->width)/2,cnty-(spritebkgnd->height)/2,spritebkgnd);
- spritegap(1,cntx-(gfxblk2->width)/2,cnty-(gfxblk2->height)/2,gfxblk2,spritebkgnd);
- sdelay(3);
- }
- spriteput(SET,1,cntx-(spritebkgnd->width)/2,cnty-(spritebkgnd->height)/2,spritebkgnd);
- for(i=xinc;i>=0;i--) {
- blkresize((gfxblk->width)-i,(gfxblk->height)-i,gfxblk,gfxblk2);
- spriteput(SET,1,cntx-(spritebkgnd->width)/2,cnty-(spritebkgnd->height)/2,spritebkgnd);
- spritegap(1,cntx-(gfxblk2->width)/2,cnty-(gfxblk2->height)/2,gfxblk2,spritebkgnd);
- sdelay(3);
- }
- spriteput(SET,1,cntx-(spritebkgnd->width)/2,cnty-(spritebkgnd->height)/2,spritebkgnd);
- blkput(SET,x1,y1,gfxblk);
- ret = getkey();
- if ((ret == 's') || (ret == 'q')) {
- fillscreen(0);
- palset(pal,16,255);
- setview(0,0,maxx,maxy);
- _ffree(gfxblk);
- _ffree(gfxblk2);
- _ffree(spritebkgnd);
- return(ret);
- }
- /*
- * Show Block Put (put the "chunks" randomly around the screen)
- */
- setview(0,16,maxx,32);
- fillview(0);
- sprintf(buf,"blkput(mode,x,y,GfxBlock);");
- drwstring(1,7,0,buf,10,16);
- xinc = maxx/10;
- yinc = maxy/10;
- setview(0,32,maxx,maxy);
- for(i=0;i<=maxx/2;i++) {
- x1 = randnum(maxx + xinc) - xinc;
- y1 = randnum(maxy + yinc) - yinc;
- blkput(1,x1,y1,gfxblk);
- }
- _ffree(gfxblk);
- _ffree(gfxblk2);
- _ffree(spritebkgnd);
- setview(0,0,maxx,maxy);
- ret = getkey();
- if ((ret == 's') || (ret == 'q')) {
- fillscreen(0);
- return(ret);
- }
- return(ret);
- }
- /**********
- * DOCLIP *
- **********/
- char doclip(void)
- {
- struct dcoord {
- int x1;
- int x2;
- int y1;
- int y2;
- };
- int i, j, k;
- int xinc, x, y, x1, y1, x2, y2;
- int xsub, radx, rady;
- int wdth, hgth, spcingx, spcingy;
- struct dcoord b[4];
- char ret;
- char title[TITLEN];
- char buf[TITLEN];
- /*
- * Set up the Title
- */
- sprintf(title,"DEMO 2: Clipping capability");
- palset(pal,0,255);
- /*
- * Set up the windows
- */
- fillscreen(0);
- setview(0,0,maxx,maxy);
- drwstring(1,7,0,title,10,0);
- sprintf(buf,"All pimitives automatically clip");
- drwstring(1,7,0,buf,10,16);
- wdth = (maxx + 1) * 4 / 9;
- spcingx = ((maxx + 1) - wdth * 2) / 3;
- hgth = (maxy + 1 - 35) * 4 / 9;
- spcingy = ((maxy + 1 - 35) - hgth * 2) / 3;
- xinc = wdth * 3 / 2;
- xsub = wdth / 4;
- b[0].x1 = spcingx;
- b[0].x2 = b[0].x1 + wdth;
- b[0].y1 = spcingy + 35;
- b[0].y2 = b[0].y1 + hgth;
- b[1].x2 = maxx - spcingx;
- b[1].x1 = b[1].x2 - wdth;
- b[1].y1 = spcingy + 35;
- b[1].y2 = b[1].y1 + hgth;
- b[2].x2 = maxx - spcingx;
- b[2].x1 = b[2].x2 - wdth;
- b[2].y2 = maxy - spcingy;
- b[2].y1 = b[2].y2 - hgth;
- b[3].x1 = spcingx;
- b[3].x2 = b[3].x1 + wdth;
- b[3].y2 = maxy - spcingy;
- b[3].y1 = b[3].y2 - hgth;
- for(i=0;i<4;i++)
- drwbox(1,15,b[i].x1++,b[i].y1++,b[i].x2--,b[i].y2--);
- /*
- * Show the clipping
- */
- for(i=0;i<=maxx/6;i++)
- for(j=0;j<4;j++) {
- setview(b[j].x1,b[j].y1,b[j].x2,b[j].y2);
- switch (j) {
- case 0:
- for(k=0;k<6;k++) {
- x = b[j].x1 + randnum(xinc) - xsub;
- y = b[j].y1 + randnum(xinc) - xsub;
- drwpoint(1,randnum(16),x,y);
- }
- break;
- case 1:
- x1 = b[j].x1 + randnum(xinc) - xsub;
- y1 = b[j].y1 + randnum(xinc) - xsub;
- x2 = b[j].x1 + randnum(xinc) - xsub;
- y2 = b[j].y1 + randnum(xinc) - xsub;
- drwline(1,randnum(16),x1,y1,x2,y2);
- break;
- case 2:
- x = b[j].x1 + randnum(xinc) - xsub;
- y = b[j].y1 + randnum(xinc) - xsub;
- radx = randnum(wdth) / 2;
- drwcircle(1,randnum(16),x,y,radx);
- break;
- case 3:
- x = b[j].x1 + randnum(xinc) - xsub;
- y = b[j].y1 + randnum(xinc) - xsub;
- radx = randnum(wdth) / 2;
- rady = randnum(wdth) / 2;
- drwellipse(1,randnum(16),x,y,radx,rady);
- break;
- }
- }
- setview(0,0,maxx,maxy);
- ret = getkey();
- return(ret);
- }
- /**********
- * DOFILL *
- **********/
- char dofill(void)
- {
- struct dcoord {
- int x1;
- int x2;
- int y1;
- int y2;
- };
- int i, colr;
- int x, y;
- int radx, rady;
- int wdth, hgth, spcingx, spcingy;
- struct dcoord b[4];
- char ret;
- char title[TITLEN];
- char buf[TITLEN];
- /*
- * Set up the Title
- */
- sprintf(title,"DEMO 3: Filling functions");
- palset(pal,0,255);
- /*
- * Set up the windows
- */
- fillscreen(10);
- setview(0,0,maxx,maxy);
- drwstring(1,7,0,title,10,0);
- sprintf(buf,"fillscreen(color);");
- drwstring(1,7,0,buf,10,16);
- ret = getkey();
- if ((ret == 's') || (ret == 'q'))
- return(ret);
- /*
- * Set up windows and show viewport fill
- */
- fillscreen(0);
- drwstring(1,7,0,title,10,0);
- sprintf(buf,"fillview(color);");
- drwstring(1,7,0,buf,10,16);
- wdth = (maxx + 1) * 4 / 9;
- spcingx = ((maxx + 1) - wdth * 2) / 3;
- hgth = (maxy + 1 - 35) * 4 / 9;
- spcingy = ((maxy + 1 - 35) - hgth * 2) / 3;
- b[0].x1 = spcingx;
- b[0].x2 = b[0].x1 + wdth;
- b[0].y1 = spcingy + 35;
- b[0].y2 = b[0].y1 + hgth;
- b[1].x2 = maxx - spcingx;
- b[1].x1 = b[1].x2 - wdth;
- b[1].y1 = spcingy + 35;
- b[1].y2 = b[1].y1 + hgth;
- b[2].x2 = maxx - spcingx;
- b[2].x1 = b[2].x2 - wdth;
- b[2].y2 = maxy - spcingy;
- b[2].y1 = b[2].y2 - hgth;
- b[3].x1 = spcingx;
- b[3].x2 = b[3].x1 + wdth;
- b[3].y2 = maxy - spcingy;
- b[3].y1 = b[3].y2 - hgth;
- for(i=0;i<4;i++)
- drwbox(1,15,b[i].x1++,b[i].y1++,b[i].x2--,b[i].y2--);
- ret = getkey();
- if ((ret == 's') || (ret == 'q')) {
- setview(0,0,maxx,maxy);
- return(ret);
- }
- /*
- * Show the clipping
- */
- for(i=0;i<4;i++) {
- setview(b[i].x1,b[i].y1,b[i].x2,b[i].y2);
- fillview(i+10);
- }
- setview(0,0,maxx,maxy);
- ret = getkey();
- if ((ret == 's') || (ret == 'q'))
- return(ret);
- /*
- * Set up windows and show area fill
- */
- fillscreen(0);
- drwstring(1,7,0,title,10,0);
- sprintf(buf,"fillarea(xseed,yseed,bordercolor,fillcolor);");
- drwstring(1,7,0,buf,10,16);
- drwbox(1,15,5,35,maxx-4,maxy-4);
- setview(6,36,maxx-5,maxy-5);
- colr=1;
- for(i=0;i<=maxx/10;i++) {
- x = 50 + randnum(maxx-50);
- y = 50 + randnum(maxy-50);
- radx = 2 + randnum(maxx/20);
- rady = 2 + randnum(maxy/20);
- drwellipse(1,colr++,x,y,radx,rady);
- if (colr>10)
- colr = 1;
- }
- for(i=0;i<=maxx/15;i++) {
- x = 50 + randnum(maxx-50);
- y = 50 + randnum(maxy-50);
- radx = 2 + randnum(maxx/20);
- rady = 2 + randnum(maxy/20);
- drwellipse(1,12,x,y,radx,rady);
- }
- ret = getkey();
- if ((ret == 's') || (ret == 'q')) {
- setview(0,0,maxx,maxy);
- return(ret);
- }
- fillarea(7,37,12,10);
- setview(0,0,maxx,maxy);
- ret = getkey();
- if ((ret == 's') || (ret == 'q'))
- return(ret);
- /*
- * Setup windows and show color fill
- */
- fillscreen(0);
- drwstring(1,7,0,title,10,0);
- sprintf(buf,"fillcolor(xseed,yseed,oldcolor,fillcolor);");
- drwstring(1,7,0,buf,10,16);
- drwbox(1,15,5,35,maxx-4,maxy-4);
- setview(6,36,maxx-5,maxy-5);
- colr=1;
- for(i=0;i<=maxx/10;i++) {
- x = 50 + randnum(maxx-50);
- y = 50 + randnum(maxy-50);
- radx = 2 + randnum(maxx/20);
- rady = 2 + randnum(maxy/20);
- drwellipse(1,colr++,x,y,radx,rady);
- if (colr>10)
- colr = 1;
- }
- for(i=0;i<=maxx/15;i++) {
- x = 50 + randnum(maxx-50);
- y = 50 + randnum(maxy-50);
- radx = 2 + randnum(maxx/20);
- rady = 2 + randnum(maxy/20);
- drwellipse(1,12,x,y,radx,rady);
- }
- ret = getkey();
- if ((ret == 's') || (ret == 'q')) {
- setview(0,0,maxx,maxy);
- return(ret);
- }
- fillcolor(7,37,0,10);
- setview(0,0,maxx,maxy);
- ret = getkey();
- return(ret);
- }
- /*********
- * DOPAL *
- *********/
- char dopal(void)
- {
- int x1, x2, y1, y2;
- int i, colr;
- char ret;
- char title[TITLEN];
- char buf[TITLEN];
- /*
- * Set up the Title
- */
- sprintf(title,"DEMO 4: Palette functions");
- palset(orgpal,0,255);
- /*
- * Show palette set/get
- */
- fillscreen(0);
- setview(0,0,maxx,maxy);
- drwstring(1,7,0,title,10,0);
- sprintf(buf,"palget(pal,beg,end),palset(pal,beg,end)");
- drwstring(1,7,0,buf,10,16);
- colr = 16;
- x1 = 10;
- x2 = maxx - 9;
- y1 = 35;
- y2 = maxy - 9;
- i = 0;
- while (y1+i < y2-i) {
- drwbox(1,colr++,x1+i,y1+i,x2-i,y2-i);
- if (colr>255)
- colr = 16;
- i++;
- }
- ret = getkey();
- if ((ret == 's') || (ret == 'q')) {
- fillscreen(0);
- setview(0,0,maxx,maxy);
- return(ret);
- }
- palset(pal,16,255);
- ret = getkey();
- if ((ret == 's') || (ret == 'q')) {
- setview(0,0,maxx,maxy);
- fillscreen(0);
- return(ret);
- }
- /*
- * Show palette auto fade out/in
- */
- setview(0,16,maxx,32);
- fillview(0);
- sprintf(buf,"palioauto(pal,beg,end,speed);");
- drwstring(1,7,0,buf,10,16);
- palioauto(pal,16,255,-2);
- palioauto(pal,16,255,2);
- ret = getkey();
- if ((ret == 's') || (ret == 'q')) {
- setview(0,0,maxx,maxy);
- return(ret);
- }
- /*
- * Show palette auto fade to
- */
- setview(0,16,maxx,32);
- fillview(0);
- sprintf(buf,"palchgauto(pal,newpal,beg,end,speed);");
- drwstring(1,7,0,buf,10,16);
- palchgauto(pal,pal2,16,255,2);
- palchgauto(pal2,pal,16,255,2);
- ret = getkey();
- if ((ret == 's') || (ret == 'q')) {
- setview(0,0,maxx,maxy);
- return(ret);
- }
- /*
- * Show palette rotate
- */
- setview(0,16,maxx,32);
- fillview(0);
- sprintf(buf,"palrotate(pal,beg,end,shift);");
- drwstring(1,7,0,buf,10,16);
- for(i=0;i<=240;i++) {
- palrotate(pal,16,255,2);
- palget(pal,16,255);
- }
- for(i=0;i<=120;i++) {
- palrotate(pal,16,255,-8);
- palget(pal,16,255);
- }
- ret = getkey();
- if ((ret == 's') || (ret == 'q'))
- setview(0,0,maxx,maxy);
- return(ret);
- }
- /***********
- * DOPRIMS *
- ***********/
- char doprims(void)
- {
- int x1, x2, y1, y2;
- int maxrad, radx, rady;
- int i, colr, num;
- char ret;
- char title[TITLEN];
- char buf[TITLEN];
- /*
- * Set up the Title
- */
- sprintf(title,"DEMO 1: Primitives");
- palset(orgpal,0,255);
- /*
- * Draw some points
- */
- fillscreen(0);
- setview(0,0,maxx,maxy);
- drwstring(1,7,0,title,10,0);
- sprintf(buf,"drwpoint(mode,color,x,y);");
- drwstring(1,7,0,buf,10,16);
- setview(0,32,maxx,maxy);
- colr = 1;
- num = maxx * 2;
- for(i=0;i<num;i++) {
- x1 = randnum(maxx);
- y1 = randnum(maxy);
- drwpoint(1,colr++,x1,y1);
- if (colr>15)
- colr = 1;
- }
- setview(0,0,maxx,maxy);
- ret = getkey();
- if ((ret=='s') || (ret=='q'))
- return(ret);
- /*
- * Draw some lines
- */
- fillscreen(0);
- setview(0,0,maxx,maxy);
- drwstring(1,7,0,title,10,0);
- sprintf(buf,"drwline(mode,color,x1,y1,x2,y2);");
- drwstring(1,7,0,buf,10,16);
- setview(0,32,maxx,maxy);
- colr = 1;
- num = maxx / 6;
- for(i=0;i<num;i++) {
- x1 = randnum(maxx);
- y1 = randnum(maxy);
- x2 = randnum(maxx);
- y2 = randnum(maxy);
- drwline(1,colr++,x1,y1,x2,y2);
- if (colr>15)
- colr = 1;
- }
- setview(0,0,maxx,maxy);
- ret = getkey();
- if ((ret=='s') || (ret=='q'))
- return(ret);
- /*
- * Draw some boxes
- */
- fillscreen(0);
- setview(0,0,maxx,maxy);
- drwstring(1,7,0,title,10,0);
- sprintf(buf,"drwbox(mode,color,x1,y1,x2,y2);");
- drwstring(1,7,0,buf,10,16);
- setview(0,32,maxx,maxy);
- colr = 1;
- num = maxx / 10;
- for(i=0;i<num;i++) {
- x1 = randnum(maxx);
- y1 = randnum(maxy);
- x2 = randnum(maxx);
- y2 = randnum(maxy);
- drwbox(1,colr++,x1,y1,x2,y2);
- if (colr>15)
- colr = 1;
- }
- setview(0,0,maxx,maxy);
- ret = getkey();
- if ((ret=='s') || (ret=='q'))
- return(ret);
- /*
- * Draw some circles
- */
- fillscreen(0);
- setview(0,0,maxx,maxy);
- drwstring(1,7,0,title,10,0);
- sprintf(buf,"drwcircle(mode,color,cx,cy,radius);");
- drwstring(1,7,0,buf,10,16);
- setview(0,32,maxx,maxy);
- colr = 1;
- num = maxx / 20;
- maxrad = maxx / 2;
- for(i=0;i<num;i++) {
- x1 = randnum(maxx);
- y1 = randnum(maxy);
- radx = randnum(maxrad);
- drwcircle(1,colr++,x1,y1,radx);
- if (colr>15)
- colr = 1;
- }
- setview(0,0,maxx,maxy);
- ret = getkey();
- if ((ret=='s') || (ret=='q'))
- return(ret);
- /*
- * Draw some ellipses
- */
- fillscreen(0);
- setview(0,0,maxx,maxy);
- drwstring(1,7,0,title,10,0);
- sprintf(buf,"drwellipse(mode,color,cx,cy,radiusx,radiusy);");
- drwstring(1,7,0,buf,10,16);
- setview(0,32,maxx,maxy);
- colr = 1;
- num = maxx / 20;
- maxrad = maxx / 2;
- for(i=0;i<num;i++) {
- x1 = randnum(maxx);
- y1 = randnum(maxy);
- radx = randnum(maxrad);
- rady = randnum(maxrad);
- drwellipse(1,colr++,x1,y1,radx,rady);
- if (colr>15)
- colr = 1;
- }
- setview(0,0,maxx,maxy);
- ret = getkey();
- return(ret);
- }
- /************
- * DOSCROLL *
- ************/
- char doscroll(void)
- {
- int i, colr, num, totnum;
- int a, b, c, d;
- int x1, x2, y1, y2;
- int spcing, skip;
- char ret;
- char title[TITLEN];
- char buf[TITLEN];
- char buf2[TITLEN];
- /*
- * Set up the Title
- */
- sprintf(title,"DEMO 7: Scroll functions");
- palset(pal,0,255);
- fillscreen(0);
- setview(0,0,maxx,maxy);
- drwstring(1,7,0,title,10,0);
- spcing = (maxy - 32) / 5;
- skip = (int)(((float)maxx + 1.) / 320. + .9) * 2 - 1;
- num = spcing / 2 / skip;
- if (spcing / 2 != (float)spcing / 2.)
- spcing++;
- x1 = (maxx + 1) / 2 - spcing;
- y1 = (maxy + 1 - 32) / 2 + 32 - spcing;
- x2 = (maxx + 1) / 2 + spcing;
- y2 = (maxy + 1 - 32) / 2 + 32 + spcing;
- drwbox(1,12,x1++,y1++,x2--,y2--);
- colr = 16;
- sprintf(buf2,"TEXT text TEXT");
- /*
- * Show scrollup
- */
- setview(0,16,maxx,maxy);
- sprintf(buf,"scrollup(x1,y1,x2,y2,numlines,fillcolor);");
- drwstring(1,7,0,buf,10,16);
- setview(x1,y1,x2,y2);
- fillview(0);
- totnum = maxx / 10;
- for(i=0;i<totnum;i++) {
- a = randnum(maxx);
- b = randnum(maxy);
- c = randnum(maxx);
- d = randnum(maxy);
- drwline(1,colr,a,b,c,d);
- colr += 3;
- if (colr > 255)
- colr = 16;
- }
- drwstring(1,7,0,buf2,x1+spcing,y1+spcing);
- drwstringlt(1,7,0,buf2,x1+spcing,y1+spcing);
- drwstringrt(1,7,0,buf2,x1+spcing,y1+spcing);
- drwstringdn(1,7,0,buf2,x1+spcing,y1+spcing);
- ret = getkey();
- if ((ret=='s') || (ret=='q'))
- return(ret);
- for(i=0;i<num;i++)
- scrollup(x1,y1,x2,y2,skip,0);
- ret = getkey();
- if ((ret=='s') || (ret=='q'))
- return(ret);
- /*
- * Show scrolllt
- */
- setview(0,16,maxx,maxy);
- sprintf(buf,"scrolllt(x1,y1,x2,y2,numlines,fillcolor);");
- drwstring(1,7,0,buf,10,16);
- setview(x1,y1,x2,y2);
- fillview(0);
- totnum = maxx / 10;
- for(i=0;i<totnum;i++) {
- a = randnum(maxx);
- b = randnum(maxy);
- c = randnum(maxx);
- d = randnum(maxy);
- drwline(1,colr,a,b,c,d);
- colr += 3;
- if (colr > 255)
- colr = 16;
- }
- drwstring(1,7,0,buf2,x1+spcing,y1+spcing);
- drwstringlt(1,7,0,buf2,x1+spcing,y1+spcing);
- drwstringrt(1,7,0,buf2,x1+spcing,y1+spcing);
- drwstringdn(1,7,0,buf2,x1+spcing,y1+spcing);
- ret = getkey();
- if ((ret=='s') || (ret=='q'))
- return(ret);
- for(i=0;i<num;i++)
- scrolllt(x1,y1,x2,y2,skip,0);
- ret = getkey();
- if ((ret=='s') || (ret=='q'))
- return(ret);
- /*
- * Show scrolldn
- */
- setview(0,16,maxx,maxy);
- sprintf(buf,"scrolldn(x1,y1,x2,y2,numlines,fillcolor);");
- drwstring(1,7,0,buf,10,16);
- setview(x1,y1,x2,y2);
- fillview(0);
- totnum = maxx / 10;
- for(i=0;i<totnum;i++) {
- a = randnum(maxx);
- b = randnum(maxy);
- c = randnum(maxx);
- d = randnum(maxy);
- drwline(1,colr,a,b,c,d);
- colr += 3;
- if (colr > 255)
- colr = 16;
- }
- drwstring(1,7,0,buf2,x1+spcing,y1+spcing);
- drwstringlt(1,7,0,buf2,x1+spcing,y1+spcing);
- drwstringrt(1,7,0,buf2,x1+spcing,y1+spcing);
- drwstringdn(1,7,0,buf2,x1+spcing,y1+spcing);
- ret = getkey();
- if ((ret=='s') || (ret=='q'))
- return(ret);
- for(i=0;i<num;i++)
- scrolldn(x1,y1,x2,y2,skip,0);
- ret = getkey();
- if ((ret=='s') || (ret=='q'))
- return(ret);
- /*
- * Show scrollrt
- */
- setview(0,16,maxx,maxy);
- sprintf(buf,"scrollrt(x1,y1,x2,y2,numlines,fillcolor);");
- drwstring(1,7,0,buf,10,16);
- setview(x1,y1,x2,y2);
- fillview(0);
- totnum = maxx / 10;
- for(i=0;i<totnum;i++) {
- a = randnum(maxx);
- b = randnum(maxy);
- c = randnum(maxx);
- d = randnum(maxy);
- drwline(1,colr,a,b,c,d);
- colr += 3;
- if (colr > 255)
- colr = 16;
- }
- drwstring(1,7,0,buf2,x1+spcing,y1+spcing);
- drwstringlt(1,7,0,buf2,x1+spcing,y1+spcing);
- drwstringrt(1,7,0,buf2,x1+spcing,y1+spcing);
- drwstringdn(1,7,0,buf2,x1+spcing,y1+spcing);
- ret = getkey();
- if ((ret=='s') || (ret=='q'))
- return(ret);
- for(i=0;i<num;i++)
- scrollrt(x1,y1,x2,y2,skip,0);
- ret = getkey();
- return(ret);
- }
- /**********
- * DOTEXT *
- **********/
- char dotext(void)
- {
- int i, colr;
- char ret;
- char title[TITLEN];
- char buf[TITLEN];
- char buf2[TITLEN];
- /*
- * Set up the Title
- */
- sprintf(title,"DEMO 6: Text functions");
- palset(pal,0,255);
- /*
- * Show alternate print directions
- */
- fillscreen(0);
- setview(0,0,maxx,maxy);
- drwstring(1,7,0,title,10,0);
- sprintf(buf,"drwstring(mode,foregnd,bkgnd,string,x,y);");
- drwstring(1,7,0,buf,10,16);
- setview(0,32,maxx,maxy);
- sprintf(buf2,"The Quick Brown Fox Jumped Over The Lazy Dog's Back! 0123456789");
- colr = 16;
- for(i=32;i<=maxy;i+=20) {
- drwstring(1,colr,0,buf2,0,i);
- colr+=5;
- if (colr>255)
- colr = 16;
- }
- ret = getkey();
- if ((ret=='s') || (ret=='q')) {
- setview(0,0,maxx,maxy);
- fillscreen(0);
- return(ret);
- }
- fillview(0);
- setview(0,16,maxx,32);
- sprintf(buf,"drwstringlt(mode,foregnd,bkgnd,string,x,y);");
- drwstring(1,7,0,buf,10,16);
- setview(0,32,maxx,maxy);
- colr = 16;
- for(i=0;i<=maxx;i+=20) {
- drwstringlt(1,colr,0,buf2,i,maxy);
- colr+=5;
- if (colr>255)
- colr = 16;
- }
- ret = getkey();
- if ((ret=='s') || (ret=='q')) {
- setview(0,0,maxx,maxy);
- fillscreen(0);
- return(ret);
- }
- fillview(0);
- setview(0,16,maxx,32);
- sprintf(buf,"drwstringdn(mode,foregnd,bkgnd,string,x,y);");
- drwstring(1,7,0,buf,10,16);
- setview(0,32,maxx,maxy);
- colr = 16;
- for(i=maxy;i>=32;i-=20) {
- drwstringdn(1,colr,0,buf2,maxx,i);
- colr+=5;
- if (colr>255)
- colr = 16;
- }
- ret = getkey();
- if ((ret=='s') || (ret=='q')) {
- setview(0,0,maxx,maxy);
- fillscreen(0);
- return(ret);
- }
- fillview(0);
- setview(0,16,maxx,32);
- sprintf(buf,"drwstringrt(mode,foregnd,bkgnd,string,x,y);");
- drwstring(1,7,0,buf,10,16);
- setview(0,32,maxx,maxy);
- colr = 16;
- for(i=maxx;i>=0;i-=20) {
- drwstringrt(1,colr,0,buf2,i,32);
- colr+=5;
- if (colr>255)
- colr = 16;
- }
- ret = getkey();
- setview(0,0,maxx,maxy);
- fillscreen(0);
- return(ret);
- }