home *** CD-ROM | disk | FTP | other *** search
/ Virtual Reality Zone / VRZONE.ISO / mac / PC / PCGLOVE / GLOVE / GLOVGRAF.C < prev    next >
C/C++ Source or Header  |  1991-11-07  |  2KB  |  91 lines

  1. /* Graphics-mode demonstration code for PowerGlove */
  2.  
  3. /* Written by Dave Stampe, Modified by Bernie Roehl, October 1991 */
  4.  
  5. #include <dos.h>
  6. #include <bios.h>
  7. #include <stdio.h>
  8. #include <conio.h>
  9. #include <graphics.h>
  10. #include "glove.h"
  11.  
  12. int gdriver = DETECT;        /* for graphics plot and cursor */
  13. int gmode = VGAHI;
  14.  
  15. void main()
  16.     {
  17.     glove_data glov;        /* glove data */
  18.     void drawthing(), drawp();
  19.  
  20.     initgraph(&gdriver, &gmode, "");
  21.     if (graphresult() < 0) {
  22.         printf("could not initialize graphics\n");
  23.         exit(1);
  24.         }
  25.     cleardevice();
  26.     glove_init(IHIRES, NULL);
  27.     while(!kbhit())
  28.         if (glove_ready()) {
  29.             if (glove_read(&glov))
  30.                 drawthing(&glov);          /* animate glove cursor */
  31.             }
  32.         else
  33.             glove_delay();
  34.     getch();            /* exit when keyboard hit */
  35.     glove_quit();
  36.     closegraph();
  37.     }
  38.  
  39. static void drawit(glove_data *g)        /* draw/erase box cursor */
  40.     {
  41.     int x = 320+2*(g->x);        /* compute X,Y center */
  42.     int y = 240-2*(g->y);
  43.     int z = 30+(g->z);        /* size prop. to Z */
  44.  
  45.     rectangle(x-z,y-z,x+z,y+z);
  46.     }
  47.  
  48. static glove_data oldbuf;    /* used to store old state for drawing */
  49.  
  50. static int drawn = 0;        /* set if cursor to be erased */
  51.  
  52. void drawthing(glove_data *g)    /* draw square cursor */
  53.     {
  54.     if (g->keys == 2) return;        /* hold down "2" to stop drawing */
  55.  
  56.     if(drawn)            /* erase old box */
  57.         {
  58.         setcolor(0);
  59.         drawit(&oldbuf);
  60.         }
  61.  
  62.     setcolor(15);            /* draw new box */
  63.     drawit(g);
  64.     drawn = 1;
  65.  
  66.     oldbuf = *g;
  67.     }
  68.  
  69. static int xx = 0;                   /* plot position */
  70.  
  71. void drawp(glove_data *g)    /* plot X,Y data to test smoothing */
  72.     {
  73.     if(g->keys==4)     /* restart at left edge if "4" pressed */
  74.         {
  75.         cleardevice();
  76.         xx=0;
  77.         }
  78.  
  79.     setcolor(0);
  80.     line(xx,0,xx,479);
  81.     line(xx+1,0,xx+1,479);
  82.     setcolor(15);
  83.     line(xx,240-2*g->x,xx+1,240-2*g->x);
  84.     setcolor(14);
  85.     line(xx+1,240-2*g->y,xx+2,240-2*g->y);
  86.     xx++;
  87.     xx++;
  88.     if(xx > 639) xx = 0;
  89.     }
  90.  
  91.