/**************************************************************************** '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 #include #include #include #include #include #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 bytes\n",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 bytes\n",i); exit(1); } gfxblk2 = _fmalloc(i); if (!gfxblk2) { restext(); printf("ERROR: Allocating memory for gfxblk2: %d bytes\n",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 bytes\n",i); exit(1); } gfxblk2 = _frealloc(gfxblk2,i); if (!gfxblk2) { restext(); printf("ERROR: reallocating memory for gfxblk2: %d bytes\n",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;i15) 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;i15) 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;i15) colr = 1; } setview(0,0,maxx,maxy); ret = getkey(); if ((ret=='s') || (ret=='q')) return(ret); /* * Draw some filled boxes */ fillscreen(0); setview(0,0,maxx,maxy); drwstring(1,7,0,title,10,0); sprintf(buf,"drwfillbox(mode,color,x1,y1,x2,y2);"); drwstring(1,7,0,buf,10,16); setview(0,32,maxx,maxy); colr = 1; num = maxx / 15; for(i=0;i15) 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;i15) colr = 1; } setview(0,0,maxx,maxy); ret = getkey(); if ((ret=='s') || (ret=='q')) return(ret); /* * Draw some filled circles */ fillscreen(0); setview(0,0,maxx,maxy); drwstring(1,7,0,title,10,0); sprintf(buf,"drwfillcircle(mode,color,cx,cy,radius);"); drwstring(1,7,0,buf,10,16); setview(0,32,maxx,maxy); colr = 1; num = maxx / 25; maxrad = maxx / 2; for(i=0;i15) 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;i15) colr = 1; } setview(0,0,maxx,maxy); ret = getkey(); /* * Draw some filled ellipses */ fillscreen(0); setview(0,0,maxx,maxy); drwstring(1,7,0,title,10,0); sprintf(buf,"drwfillellipse(mode,color,cx,cy,radiusx,radiusy);"); drwstring(1,7,0,buf,10,16); setview(0,32,maxx,maxy); colr = 1; num = maxx / 25; maxrad = maxx / 2; for(i=0;i15) 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 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 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 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 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;i255) 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); }