home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / VGALIB.ZIP / VGALIB.C < prev    next >
C/C++ Source or Header  |  1992-09-14  |  3KB  |  216 lines

  1. /* test of VioGetPhysBuf()  */
  2.  
  3. #define INCL_DOS
  4. #define INCL_SUB
  5. #include <os2.h>
  6. #include <math.h>
  7. #include <string.h>
  8. #include <stdlib.h>
  9.  
  10. #define HANDLE 0
  11. #define WAIT 1
  12. #define BUFSIZE 12
  13. #define XRES 320
  14. #define YRES 200
  15.  
  16.  
  17. void cls(ptr0,color)
  18. PCH ptr0;
  19. char color;
  20. {
  21. memset((PCH) ptr0,(color*256 + color),64000);
  22. }
  23.  
  24. void putpixel(ptr0,x,y,color)
  25. PCH ptr0;
  26. unsigned int x;
  27. unsigned int y;
  28. char color;
  29. {
  30. if ((x<XRES) && (y<YRES)) { 
  31. *(PCH) (ptr0+x+(XRES*y))=color;
  32. }
  33. }
  34.  
  35. char getpixel(ptr0,x,y)
  36. PCH ptr0;
  37. unsigned int x,y;
  38. {
  39. if ((x<XRES) && (y<YRES)) {
  40. return (*(PCH) (ptr0+x+(XRES*y)));
  41. }
  42.  
  43. }
  44.  
  45.  
  46. void line(ptr0,x1,y1,x2,y2,color)
  47. PCH ptr0;
  48. unsigned int x1,y1,x2,y2;
  49. char color;
  50. {
  51. unsigned int x,y;
  52.          int d,dx,dy,incrE,incrNE;
  53.  
  54. if (x1>x2) {
  55.    x=x2;
  56.    x2=x1;
  57.    x1=x;
  58.    y=y2;
  59.    y2=y1;
  60.    y1=y;
  61. }
  62. else {
  63.    x=x1;
  64.    y=y1;
  65. }
  66.  
  67. dx=x2-x1;
  68. dy=y2-y1;
  69. if (abs(dx)>=abs(dy)) {
  70.  
  71.   if (dy>=0) {
  72.     *(PCH) (ptr0+x+(XRES*y))=color;
  73.     d=(2*dy) - dx;
  74.     incrE=2*dy;
  75.     incrNE=2*(dy-dx);
  76.  
  77.     while (x<x2)
  78.     {
  79.         if (d<=0)
  80.             {  d+=incrE;
  81.            x++; }
  82.         else
  83.         {
  84.            d+=incrNE;
  85.            x++;
  86.            y++;
  87.         }
  88.     *(PCH) (ptr0+x+(XRES*y))=color;
  89.     }
  90.   }
  91.   else {
  92.     *(PCH) (ptr0+x+(XRES*y))=color;
  93.     d=(2*dy)+dx;
  94.     incrE=2*dy;
  95.     incrNE=2*(dy+dx);
  96.     while (x<x2)
  97.     {
  98.         if (d>=0)
  99.         { d+=incrE;
  100.           x++; }
  101.         else
  102.         { d+=incrNE;
  103.           x++;  
  104.           y--; 
  105.             }
  106.     *(PCH) (ptr0+x+(XRES*y))=color;
  107.     } 
  108.  
  109. } /* end of if (dx>dy) */
  110. else {  /* if (dx<dy) */
  111.  
  112.   if (dy>=0) {
  113.     *(PCH) (ptr0+x+(XRES*y))=color;
  114.     d=(2*dx) - dy;
  115.     incrE=2*dx;
  116.     incrNE=2*(dx-dy);
  117.     while (y<y2)
  118.     {
  119.         if (d<=0)
  120.             {  d+=incrE;
  121.            y++; }
  122.         else
  123.         {
  124.            d+=incrNE;
  125.            y++;
  126.            x++;
  127.         }
  128.     *(PCH) (ptr0+x+(XRES*y))=color;
  129.     }
  130.   }
  131.   else {
  132.     *(PCH) (ptr0+x+(XRES*y))=color;
  133.     d=(2*dx)+dy;
  134.     incrE=2*dx;
  135.     incrNE=2*(dy+dx);
  136.     while (y>y2)
  137.     {
  138.         if (d<=0)
  139.         { d+=incrE;
  140.           y--;
  141.            }
  142.         else
  143.         { d+=incrNE;
  144.           y--; 
  145.               x++;}
  146.     *(PCH) (ptr0+x+(XRES*y))=color;
  147.     } 
  148.   }
  149. }
  150. } /* end of midline */
  151.  
  152. box(ptr0,x1,y1,x2,y2,color)
  153. PCH ptr0;
  154. unsigned int x1,y1,x2,y2;
  155. char color;
  156. {
  157. unsigned int y,lx,ly,ux,uy;
  158. register unsigned int x;
  159.  
  160.   lx=min(x1,x2);
  161.   ux=max(x1,x2);
  162.   ly=min(y1,y2);
  163.   uy=max(y1,y2);
  164.  
  165.   for (y=ly*XRES; y<=uy*XRES; y+=XRES) {
  166.     for (x=lx;x<=ux;x++) {
  167.       *(PCH) (ptr0+y+x)=color;
  168.     }
  169.   }
  170. }
  171.  
  172. void circlepoints(ptr0,x,y,xc,yc,color)
  173. PCH ptr0;
  174. int x,y;
  175. unsigned int xc,yc;
  176. char color;
  177. {
  178. *(PCH) (ptr0+x+xc+(y+yc)*XRES)=color;
  179. *(PCH) (ptr0+y+xc+(x+yc)*XRES)=color;
  180. *(PCH) (ptr0+y+xc+(-x+yc)*XRES)=color;
  181. *(PCH) (ptr0+x+xc+(-y+yc)*XRES)=color;
  182. *(PCH) (ptr0-x+xc+(-y+yc)*XRES)=color;
  183. *(PCH) (ptr0-y+xc+(-x+yc)*XRES)=color;
  184. *(PCH) (ptr0-y+xc+(x+yc)*XRES)=color;
  185. *(PCH) (ptr0-x+xc+(y+yc)*XRES)=color;
  186. }
  187.  
  188. void circle(ptr0,xc,yc,radius,color)
  189. PCH ptr0;
  190. unsigned int xc,yc,radius;
  191. char color;
  192. {
  193. int x,y,d;
  194.  
  195. x=0;
  196. y=radius;
  197. d=1-radius;
  198. circlepoints(ptr0,x,y,xc,yc,color);
  199.  
  200. while (y>x) {
  201.     if (d<0) {
  202.         d+=2*x+3;
  203.         x++;
  204.     }
  205.     else {
  206.         d+=2*(x-y)+5;
  207.         x++;
  208.         y--;
  209.     }
  210.      circlepoints(ptr0,x,y,xc,yc,color);
  211. }
  212. }
  213.  
  214.  
  215.