/**************************************************************************** '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" char showgif(char fname[]); void showhouse(D2Point *plotarray, D2Point *oplotarray); void showstar(D2Point *plotarray, D2Point *oplotarray); /******** * DO2D * ********/ char do2d(void) { int i, trans; int spcing, cntx, cnty; D2Point pointarray[9]; D2Point plotarray[9]; D2Point oplotarray[9]; char ret; char title[TITLEN]; char buf[TITLEN]; char buf2[TITLEN]; /* * Set up the Title */ sprintf(title,"DEMO 11: 2D functions"); palset(pal,0,255); /* * Set up the star patter of points */ cntx = maxx / 2; cnty = (maxy - 32) / 2 + 32; spcing = maxx / 15; pointarray[0].x = 0; pointarray[0].y = -spcing * 3; pointarray[1].x = spcing; pointarray[1].y = -spcing; pointarray[2].x = spcing * 3; pointarray[2].y = 0; pointarray[3].x = spcing; pointarray[3].y = spcing; pointarray[4].x = 0; pointarray[4].y = spcing * 3; pointarray[5].x = -spcing; pointarray[5].y = spcing; pointarray[6].x = -spcing * 3; pointarray[6].y = 0; pointarray[7].x = -spcing; pointarray[7].y = -spcing; pointarray[8].x = 0; pointarray[8].y = -spcing * 3; /* * Show d2translate */ fillscreen(0); setview(0,0,maxx,maxy); drwstring(1,7,0,title,10,0); sprintf(buf,"d2translate(point,xtrans,ytrans,inarray,outarray);"); drwstring(1,7,0,buf,10,16); setview(0,32,maxx,maxy); d2translate(9,cntx,cnty,pointarray,plotarray); showstar(plotarray,oplotarray); ret = getkey(); if ((ret=='s') || (ret=='q')) { fillscreen(0); setview(0,0,maxx,maxy); return(ret); } trans = 0; for(i=0;i=128;i-=4) { d2scale(9,i,i,pointarray,plotarray); d2translate(9,cntx,cnty,plotarray,plotarray); showstar(plotarray,oplotarray); sdelay(2); } for(i=124;i<=256;i+=4) { d2scale(9,i,i,pointarray,plotarray); d2translate(9,cntx,cnty,plotarray,plotarray); showstar(plotarray,oplotarray); sdelay(2); } ret = getkey(); if ((ret=='s') || (ret=='q')) { fillscreen(0); setview(0,0,maxx,maxy); return(ret); } /* * Show d2rotate */ setview(0,16,maxx,31); fillview(0); setview(0,16,maxx,maxy); sprintf(buf,"d2rotate(points,xorigin,yorigin,angle,inarray,outarray);"); drwstring(1,7,0,buf,10,16); sprintf(buf2,"Let's do it about the center of the object."); drwstring(1,7,0,buf2,10,32); setview(0,48,maxx,maxy); d2translate(9,cntx,cnty,pointarray,plotarray); showstar(plotarray,oplotarray); for(i=0;i<=180;i++) { d2rotate(9,0,0,i,pointarray,plotarray); d2translate(9,cntx,cnty,plotarray,plotarray); showstar(plotarray,oplotarray); sdelay(2); } for(i=180;i>=0;i-=2) { d2rotate(9,0,0,i,pointarray,plotarray); d2translate(9,cntx,cnty,plotarray,plotarray); showstar(plotarray,oplotarray); sdelay(2); } ret = getkey(); if ((ret=='s') || (ret=='q')) { fillscreen(0); setview(0,0,maxx,maxy); return(ret); } /* * Show d2rotate (about an arbitrary point) */ setview(0,16,maxx,48); fillview(0); setview(0,16,maxx,maxy); sprintf(buf,"d2rotate(points,xorigin,yorigin,angle,inarray,outarray);"); drwstring(1,7,0,buf,10,16); sprintf(buf2,"Let's do it about an arbitrary point."); drwstring(1,7,0,buf2,10,32); setview(0,48,maxx,maxy); d2translate(9,cntx,cnty,pointarray,plotarray); showstar(plotarray,oplotarray); for(i=0;i<=360;i+=2) { d2rotate(9,0,spcing*3,i,pointarray,plotarray); d2translate(9,cntx,cnty,plotarray,plotarray); showstar(plotarray,oplotarray); sdelay(2); } ret = getkey(); fillscreen(0); setview(0,0,maxx,maxy); return(ret); } /******** * DO3D * ********/ char do3d(void) { float pi; int i; float height, radius; int spcing; D3Point pointarray[14]; D3Point playarray[14]; D2Point plotarray[14]; D2Point oplotarray[14]; ProjParameters proj; char ret; char title[TITLEN]; char buf[TITLEN]; /* * Set up the Title */ sprintf(title,"DEMO 12: 3D functions"); palset(pal,0,255); /* * Set up the house pattern of points */ spcing = maxx / 6; pointarray[0].x = -spcing; pointarray[0].y = -spcing * 2; pointarray[0].z = 0; pointarray[1].x = spcing; pointarray[1].y = -spcing * 2; pointarray[1].z = 0; pointarray[2].x = spcing; pointarray[2].y = -spcing * 2; pointarray[2].z = spcing * 2; pointarray[3].x = -spcing; pointarray[3].y = -spcing * 2; pointarray[3].z = spcing * 2; pointarray[4].x = -spcing; pointarray[4].y = spcing * 2; pointarray[4].z = 0; pointarray[5].x = spcing; pointarray[5].y = spcing * 2; pointarray[5].z = 0; pointarray[6].x = spcing; pointarray[6].y = spcing * 2; pointarray[6].z = spcing * 2; pointarray[7].x = -spcing; pointarray[7].y = spcing * 2; pointarray[7].z = spcing * 2; pointarray[8].x = 0; pointarray[8].y = -spcing * 2; pointarray[8].z = spcing * 3; pointarray[9].x = 0; pointarray[9].y = spcing * 2; pointarray[9].z = spcing * 3; pointarray[10].x = 0; pointarray[10].y = 0; pointarray[10].z = 0; pointarray[11].x = spcing * 4; pointarray[11].y = 0; pointarray[11].z = 0; pointarray[12].x = 0; pointarray[12].y = 0; pointarray[12].z = spcing * 4; pointarray[13].x = 0; pointarray[13].y = spcing * 4; pointarray[13].z = 0; bytecopy(pointarray,playarray,sizeof(pointarray)); /* * Show d3project */ setview(0,0,maxx,maxy); pi = (float)(4. * atan(1) / 180.); fillscreen(0); drwstring(1,7,0,title,10,0); sprintf(buf,"d3project(points,projparams,inarray,outarray);"); drwstring(1,7,0,buf,10,16); setview(0,32,maxx,maxy); height = (float)(maxy * 8); radius = (float)(maxx * 30); proj.scrd = (int)(sqrt(radius * radius + height * height) / 2.); proj.theta = 110; proj.phi = (int)(atan(height / -radius) / pi); proj.eyex = (int)(-radius * cos(proj.theta * pi)); proj.eyey = (int)(-radius * sin(proj.theta * pi)); proj.eyez = (int)height; d3project(14,&proj,playarray,plotarray); for(i=0;i<14;i++) { oplotarray[i].x = plotarray[i].x; oplotarray[i].y = plotarray[i].y; } showhouse(plotarray,oplotarray); ret = getkey(); if ((ret=='s') || (ret=='q')) { fillscreen(0); setview(0,0,maxx,maxy); return(ret); } for(i=112;i<=470;i+=3) { proj.theta = i; proj.eyex = (int)(-radius * cos(proj.theta * pi)); proj.eyey = (int)(-radius * sin(proj.theta * pi)); d3project(14,&proj,playarray,plotarray); showhouse(plotarray,oplotarray); sdelay(2); } ret = getkey(); if ((ret=='s') || (ret=='q')) { fillscreen(0); setview(0,0,maxx,maxy); return(ret); } /* * Show d3translate */ setview(0,16,maxx,31); fillview(0); sprintf(buf,"d3translate(points,xtrans,ytrans,ztrans,inarray,outarray);"); drwstring(1,7,0,buf,10,16); setview(0,32,maxx,maxy); for(i=2;i<=300;i+=6) { d3translate(10,i,i,0,pointarray,playarray); d3project(10,&proj,playarray,plotarray); showhouse(plotarray,oplotarray); sdelay(2); } for(i=302;i>=2;i-=6) { d3translate(10,i,i,0,pointarray,playarray); d3project(10,&proj,playarray,plotarray); showhouse(plotarray,oplotarray); sdelay(2); } ret = getkey(); if ((ret=='s') || (ret=='q')) { fillscreen(0); setview(0,0,maxx,maxy); return(ret); } /* * Show d3scale */ setview(0,16,maxx,31); fillview(0); sprintf(buf,"d3scale(points,xscale,yscale,zscale,inarray,outarray);"); drwstring(1,7,0,buf,10,16); setview(0,32,maxx,maxy); for(i=256;i<=380;i+=4) { d3scale(10,i,i,i,pointarray,playarray); d3project(10,&proj,playarray,plotarray); showhouse(plotarray,oplotarray); sdelay(2); } for(i=384;i>=128;i-=4) { d3scale(10,i,i,i,pointarray,playarray); d3project(10,&proj,playarray,plotarray); showhouse(plotarray,oplotarray); sdelay(2); } for(i=124;i<=256;i+=4) { d3scale(10,i,i,i,pointarray,playarray); d3project(10,&proj,playarray,plotarray); showhouse(plotarray,oplotarray); sdelay(2); } ret = getkey(); if ((ret=='s') || (ret=='q')) { fillscreen(0); setview(0,0,maxx,maxy); return(ret); } /* * show d3rotate */ setview(0,16,maxx,31); fillview(0); sprintf(buf,"d3rotate(points,xorigin,yorigin,zorigin,zangle,yangle,xangle,inarray,outarray);"); drwstring(1,7,0,buf,10,16); setview(0,32,maxx,maxy); for(i=0;i<=360;i+=3) { d3rotate(10,0,0,0,0,i,i,pointarray,playarray); d3project(10,&proj,playarray,plotarray); showhouse(plotarray,oplotarray); sdelay(2); } ret = getkey(); fillscreen(0); setview(0,0,maxx,maxy); return(ret); } /*********** * DOMOUSE * ***********/ char domouse(void) { int i, mouse; int colr, x1, x2, y1, y2; int lb, cb, rb, x, y, mbuts; int spcing; char ret; char title[TITLEN]; char buf[TITLEN]; /* * Set up the title */ sprintf(title,"DEMO 9: Mouse functions"); fillscreen(0); palset(pal,0,255); setview(0,0,maxx,maxy); /* * Check to see if we have a mouse so we can do the mouse demo */ mouse = whichmouse(); if (mouse < 1) { drwstring(1,7,0,title,10,0); sprintf(buf,"Sorry, no mouse detected... Can not do the mouse demo."); drwstring(1,7,0,buf,10,16); ret = getkey(); fillscreen(0); return(ret); } 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; } /* * Show mouseshow */ setview(0,0,maxx,31); fillview(0); drwstring(1,7,0,title,10,0); sprintf(buf,"mouseshow();"); drwstring(1,7,0,buf,10,16); setview(0,32,maxx,maxy); mouseenter(); /* MUST BE CALLED FIRST TO ENABLE MOUSE FUNCTIONS */ mouseshow(); ret = getkey(); if ((ret=='s') || (ret=='q')) { mouseexit(); /* MUST BE CALLED TO DISABLE MOUSE FUNCTIONS */ fillscreen(0); setview(0,0,maxx,maxy); return(ret); } /* * Show mousestatus */ mousehide(); setview(0,16,maxx,31); fillview(0); sprintf(buf,"mousestatus(xloc,yloc,mbuts);"); drwstring(1,7,0,buf,10,16); mouseshow(); setview(0,32,maxx,maxy); beep(); while(!kbhit()) { lb = cb = rb = 0; mousestatus(&x,&y,&mbuts); if (mbuts & 1) lb = 1; if (mbuts & 2) rb = 1; if (mbuts & 4) cb = 1; sprintf(buf,"X= %4d Y= %4d LB= %1d CB= %1d RB= %1d",x,y,lb,cb,rb); drwstring(1,15,8,buf,10,32); } ret = (char)getch(); if ( (ret == 'Q') || (ret == 'q') ) endit = 1; if (ret == 'Q') ret = 'q'; if (ret == 'S') ret = 's'; if ((ret=='s') || (ret=='q')) { mouseexit(); /* MUST BE CALLED TO DISABLE MOUSE FUNCTIONS */ fillscreen(0); setview(0,0,maxx,maxy); return(ret); } /* * Show mousehide */ mousehide(); setview(0,16,maxx,31); fillview(0); sprintf(buf,"mousehide(xloc,yloc,mbuts);"); drwstring(1,7,0,buf,10,16); setview(0,32,maxx,maxy); beep(); while(!kbhit()) { lb = cb = rb = 0; mousestatus(&x,&y,&mbuts); if (mbuts & 1) lb = 1; if (mbuts & 2) rb = 1; if (mbuts & 4) cb = 1; sprintf(buf,"X= %4d Y= %4d LB= %1d CB= %1d RB= %1d",x,y,lb,cb,rb); drwstring(1,15,8,buf,10,32); } ret = (char)getch(); if ( (ret == 'Q') || (ret == 'q') ) endit = 1; if (ret == 'Q') ret = 'q'; if (ret == 'S') ret = 's'; if ((ret=='s') || (ret=='q')) { mouseexit(); /* MUST BE CALLED TO DISABLE MOUSE FUNCTIONS */ fillscreen(0); setview(0,0,maxx,maxy); return(ret); } /* * Show mouserangeset */ mousehide(); setview(0,16,maxx,maxy); fillview(0); sprintf(buf,"mouserangeset(x1,y1,x2,y2);"); drwstring(1,7,0,buf,10,16); setview(0,32,maxx,maxy); spcing = (maxy - 32) / 3; x1 = spcing; y1 = 32 + spcing; x2 = maxx - spcing; y2 = maxy - spcing; drwbox(1,15,x1,y1,x2,y2); mouseshow(); mouserangeset(x1,y1,x2,y2); ret = getkey(); mouserangeset(0,0,maxx,maxy); if ((ret=='s') || (ret=='q')) { mouseexit(); /* MUST BE CALLED TO DISABLE MOUSE FUNCTIONS */ fillscreen(0); setview(0,0,maxx,maxy); return(ret); } /* * Show mousecursorset - use the magnifier */ setview(0,16,maxx,31); fillview(0); sprintf(buf,"mousecursorset(mousecursor);"); drwstring(1,7,0,buf,10,16); setview(0,32,maxx,maxy); mousecursorset(&magmousecursor); ret = getkey(); if ((ret=='s') || (ret=='q')) { mouseexit(); /* MUST BE CALLED TO DISABLE MOUSE FUNCTIONS */ fillscreen(0); setview(0,0,maxx,maxy); return(ret); } /* * Show mousecursorset - use the big arrow */ setview(0,32,maxx,maxy); mousecursorset(&bigmousecursor); ret = getkey(); if ((ret=='s') || (ret=='q')) { mouseexit(); /* MUST BE CALLED TO DISABLE MOUSE FUNCTIONS */ fillscreen(0); setview(0,0,maxx,maxy); return(ret); } /* * Show mousecursorset - use the stopwatch */ setview(0,32,maxx,maxy); mousecursorset(&stwmousecursor); ret = getkey(); if ((ret=='s') || (ret=='q')) { mouseexit(); /* MUST BE CALLED TO DISABLE MOUSE FUNCTIONS */ fillscreen(0); setview(0,0,maxx,maxy); return(ret); } /* * Show mousecursordefault */ mousehide(); setview(0,16,maxx,31); fillview(0); sprintf(buf,"mousecursordefault();"); drwstring(1,7,0,buf,10,16); mouseshow(); setview(0,32,maxx,maxy); mousecursordefault(); ret = getkey(); mouseexit(); /* MUST BE CALLED TO DISABLE MOUSE FUNCTIONS */ fillscreen(0); setview(0,0,maxx,maxy); return(ret); } /********* * DOGIF * *********/ char dogif(void) { int endthis; int ext, length; char c, ret; char title[TITLEN]; char buf[TITLEN]; char *fname; fname=malloc(128); /* * Setup the title */ sprintf(title,"DEMO 8: GIF functions"); /* * Show gifgetinfo */ setview(0,0,maxx,maxy); fillscreen(0); drwstring(1,7,0,title,10,0); endthis = 0; ret = '\0'; while (!endthis) { sprintf(buf,"Please provide the name (and full path if not in the current drive/directory)"); drwstring(1,7,0,buf,10,64); sprintf(buf,"of a GIF file you would like to see..."); drwstring(1,7,0,buf,10,80); sprintf(buf,"Filename:"); drwstring(1,7,0,buf,10,96); sprintf(fname,"_"); length = 0; ext = 0; c = '\0'; while(!ext) { drwstring(1,7,0,fname,82,96); c = (char)getch(); if(c>=' ' && c<='~') { fname[length] = c; fname[length+1] = '_'; fname[length+2] = '\0'; length++; } else if (c==8 && length>0) { drwstring(1,15,0," ",82+length*8,96); length--; fname[length] = '_'; fname[length+1] = '\0'; } else if (c==13) ext = 1; } if (length==0) { free(fname); return(ret); } fname[length] = '\0'; ret = showgif(fname); if ((ret=='s') || (ret=='q')) { fillscreen(0); free(fname); return(ret); } drwstring(1,7,0,title,10,0); sprintf(buf,"Would you like to see another (Y/N) ?"); drwstring(1,7,0,buf,10,64); ext = 0; while(!ext) { c=(char)getch(); if ((c=='n') || (c=='N')) { ext = 1; endthis = 1; } else if ((c=='y') || (c=='Y')) ext = 1; } } fillscreen(0); free(fname); return(ret); } /************** * DOJOYSTICK * **************/ char dojoystick(void) { int maxxa, maxya, minxa, minya; int maxxb, maxyb, minxb, minyb; int jax, jay, jabuts, jbx, jby, jbbuts; int joystick, spcing, dist; int x1, y1, x2, y2, x3, y3, x4, y4; int cntax, cntay, cntbx, cntby; int rangexa, rangeya, rangexb, rangeyb; int jabax, jabay, jabbx, jabby; int jbbax, jbbay, jbbbx, jbbby; int oax, oay, obx, oby; char ret; char title[TITLEN]; char buf[TITLEN]; oax = oay = obx = oby = 0; /* * Set up the title */ sprintf(title,"DEMO 10: Joystick functions"); palset(pal,0,255); fillscreen(0); setview(0,0,maxx,maxy); drwstring(1,7,0,title,10,0); /* * Check to see if we have a joystick so we can do the joystick demo */ joystick = whichjoystick(); if (joystick < 1) { sprintf(buf,"Sorry, no joystick detected... Can not do the joystick demo."); drwstring(1,7,0,buf,10,16); ret = getkey(); fillscreen(0); return(ret); } /* * Show joystickinfo (here we do some joystick calibration */ sprintf(buf,"joystickinfo(jax,jay,jabuts,jbx,jby,jbbuts);"); drwstring(1,7,0,buf,10,16); switch(joystick) { case 1: sprintf(buf,"Please move Joystick A as far as it will go in all directions."); break; case 2: sprintf(buf,"Please move Joystick B as far as it will go in all directions."); break; case 3: sprintf(buf,"Please move Joystick A and B as far as they will go in all directions."); break; } drwstring(1,7,0,buf,10,32); drwstring(1,7,0,"And then press a key...",10,48); maxxa = -1; maxya = -1; minxa = 10000; minya = 10000; maxxb = -1; maxyb = -1; minxb = 10000; minyb = 10000; do { while(!kbhit()) { joystickinfo(&jax,&jay,&jabuts,&jbx,&jby,&jbbuts); if (joystick & 1) { if (jax>maxxa) maxxa = jax; if (jaxmaxya) maxya = jay; if (jaymaxxb) maxxb = jbx; if (jbxmaxyb) maxyb = jby; if (jby63) || (gifpal[i].g>63) || (gifpal[i].b>63)) fixit = 1; t = gifpal[i].r + gifpal[i].g + gifpal[i].b; if(tmax) { max = t; maxcolor = i; } } /* * If the GIF uses more than 6 bit color, then we shift each color entry * right by 2 bits. (This reduces it to 6 bits of color.) */ if (fixit) for(i=0;i>=2; gifpal[i].g>>=2; gifpal[i].b>>=2; } /* * If the GIF has a palette of 128 colors or less, then we can use * our own colors for the text and background. */ if (numcol<=128) { gifpal[254].r = gifpal[254].g = gifpal[254].b = 0; mincolor = 254; gifpal[255].r = gifpal[255].g = gifpal[255].b = 32; maxcolor = 255; } sprintf(buf,"'%s' is identified as a 'Non-interlaced' type 'GIF87a' GIF image.",fname); drwstring(1,15,0,buf,10,64); sprintf(buf,"Dimensions are: %d pixels wide and %d pixels high.",xsize,ysize); drwstring(1,15,0,buf,10,80); sprintf(buf,"Number of colors: %d.",numcol); drwstring(1,15,0,buf,10,96); ret = getkey(); if ((ret=='s') || (ret=='q')) { fillscreen(0); setview(0,0,maxx,maxy); palset(orgpal,0,255); free(buf); return(ret); } /* * Show gifput */ palset(gifpal,0,255); overscanset(mincolor); fillscreen(mincolor); drwstring(1,maxcolor,mincolor,"DEMO 8: GIF functions",10,0); sprintf(buf,"gifput(mode,x,y,filename);"); drwstring(1,maxcolor,mincolor,buf,10,16); setview(0,32,maxx,maxy); xloc = maxx / 2 - xsize / 2; yloc = (maxy - 32) / 2 - ysize / 2 + 32; ok = gifput(1,xloc,yloc,fname); if (ok!=1) { palset(orgpal,0,255); sprintf(buf,"The file '%s'",fname); switch (ok) { case 0: strcat(buf," does not exist in the specified directory."); break; case -1: strcat(buf," does not have the 'GIF87a' signature."); break; case -2: strcat(buf," is an interlaced GIF."); break; case -3: strcat(buf," does not use a global color map."); break; default: /* should have a value of -4 */ strcat(buf," has some general error."); } drwstring(1,15,0,buf,10,64); } } else { palset(orgpal,0,255); sprintf(buf,"The file '%s'",fname); switch (ok) { case 0: strcat(buf," does not exist in the specified directory."); break; case -1: strcat(buf," does not have the 'GIF87a' signature."); break; case -2: strcat(buf," is an interlaced GIF."); break; case -3: strcat(buf," does not use a global color map."); break; default: /* should have a value of -4 */ strcat(buf," has some general error."); } drwstring(1,15,0,buf,10,64); } ret = getkey(); palset(orgpal,0,255); overscanset(0); fillscreen(0); setview(0,0,maxx,maxy); free(buf); return(ret); } /************* * SHOWHOUSE * *************/ void showhouse(D2Point *plotarray, D2Point *oplotarray) { int i; /* Erase old axes */ drwline(1,0,(oplotarray+10)->x,(oplotarray+10)->y,(oplotarray+11)->x,(oplotarray+11)->y); drwline(1,0,(oplotarray+10)->x,(oplotarray+10)->y,(oplotarray+12)->x,(oplotarray+12)->y); drwline(1,0,(oplotarray+10)->x,(oplotarray+10)->y,(oplotarray+13)->x,(oplotarray+13)->y); /* Erase old house */ for(i=0;i<3;i++) { drwline(1,0,(oplotarray+i)->x,(oplotarray+i)->y,(oplotarray+i+1)->x,(oplotarray+i+1)->y); drwline(1,0,(oplotarray+i+4)->x,(oplotarray+i+4)->y,(oplotarray+i+4+1)->x,(oplotarray+i+4+1)->y); drwline(1,0,(oplotarray+i)->x,(oplotarray+i)->y,(oplotarray+i+4)->x,(oplotarray+i+4)->y); } drwline(1,0,(oplotarray+3)->x,(oplotarray+3)->y,(oplotarray+7)->x,(oplotarray+7)->y); drwline(1,0,(oplotarray+0)->x,(oplotarray+0)->y,(oplotarray+3)->x,(oplotarray+3)->y); drwline(1,0,(oplotarray+4)->x,(oplotarray+4)->y,(oplotarray+7)->x,(oplotarray+7)->y); drwline(1,0,(oplotarray+3)->x,(oplotarray+3)->y,(oplotarray+8)->x,(oplotarray+8)->y); drwline(1,0,(oplotarray+8)->x,(oplotarray+8)->y,(oplotarray+2)->x,(oplotarray+2)->y); drwline(1,0,(oplotarray+9)->x,(oplotarray+9)->y,(oplotarray+7)->x,(oplotarray+7)->y); drwline(1,0,(oplotarray+9)->x,(oplotarray+9)->y,(oplotarray+6)->x,(oplotarray+6)->y); drwline(1,0,(oplotarray+8)->x,(oplotarray+8)->y,(oplotarray+9)->x,(oplotarray+9)->y); /* Draw new axes */ drwline(1,8,(plotarray+10)->x,(plotarray+10)->y,(plotarray+11)->x,(plotarray+11)->y); drwline(1,8,(plotarray+10)->x,(plotarray+10)->y,(plotarray+12)->x,(plotarray+12)->y); drwline(1,8,(plotarray+10)->x,(plotarray+10)->y,(plotarray+13)->x,(plotarray+13)->y); /* Draw new house */ for(i=0;i<3;i++) { drwline(1,10,(plotarray+i)->x,(plotarray+i)->y,(plotarray+i+1)->x,(plotarray+i+1)->y); drwline(1,10,(plotarray+i+4)->x,(plotarray+i+4)->y,(plotarray+i+4+1)->x,(plotarray+i+4+1)->y); drwline(1,10,(plotarray+i)->x,(plotarray+i)->y,(plotarray+i+4)->x,(plotarray+i+4)->y); } drwline(1,10,(plotarray+3)->x,(plotarray+3)->y,(plotarray+7)->x,(plotarray+7)->y); drwline(1,10,(plotarray+0)->x,(plotarray+0)->y,(plotarray+3)->x,(plotarray+3)->y); drwline(1,10,(plotarray+4)->x,(plotarray+4)->y,(plotarray+7)->x,(plotarray+7)->y); drwline(1,10,(plotarray+3)->x,(plotarray+3)->y,(plotarray+8)->x,(plotarray+8)->y); drwline(1,10,(plotarray+8)->x,(plotarray+8)->y,(plotarray+2)->x,(plotarray+2)->y); drwline(1,10,(plotarray+9)->x,(plotarray+9)->y,(plotarray+7)->x,(plotarray+7)->y); drwline(1,10,(plotarray+9)->x,(plotarray+9)->y,(plotarray+6)->x,(plotarray+6)->y); drwline(1,10,(plotarray+8)->x,(plotarray+8)->y,(plotarray+9)->x,(plotarray+9)->y); /* Save old points */ bytecopy(plotarray,oplotarray,14*sizeof(*plotarray)); return; } /************ * SHOWSTAR * ************/ void showstar(D2Point *plotarray, D2Point *oplotarray) { int i; for(i=0;i<8;i++) drwline(1,0,(oplotarray+i)->x,(oplotarray+i)->y,((oplotarray+i)+1)->x,((oplotarray+i)+1)->y); for(i=0;i<8;i++) drwline(1,10,(plotarray+i)->x,(plotarray+i)->y,((plotarray+i)+1)->x,((plotarray+i)+1)->y); bytecopy(plotarray,oplotarray,9*sizeof(*plotarray)); return; }