home *** CD-ROM | disk | FTP | other *** search
/ Stars of Shareware: Programmierung / SOURCE.mdf / programm / msdos / c / svgabg52 / mouse / moustest.c next >
Encoding:
C/C++ Source or Header  |  1993-04-20  |  4.0 KB  |  178 lines

  1. #include <stdio.h>
  2. #include <graphics.h>
  3. #include <dos.h>
  4. #include <conio.h>
  5. #include <stdlib.h>
  6. #include "svga32k.h"
  7.  
  8.    unsigned cursor[3][32] = 
  9.     {{0xe01f,0xe01f,0xe01f,0xc00f,0x8007,0x3,0x3,0x1,
  10.     0x3,0x3,0x8007,0xc00f,0xe01f,0xe01f,0xe01f,0xffff,
  11.     0x0,0xfc0,0xfc0,0x1020,0x2110,0x4108,0x4108,0x410c,
  12.     0x4208,0x4408,0x2010,0x1020,0xfc0,0xfc0,0x0,0x0},
  13.  
  14.     {0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
  15.     0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
  16.     0x0,0x1c70,0x280,0x100,0x100,0x100,0x100,0x100,
  17.     0x100,0x100,0x100,0x7c0,0x100,0x280,0x1c70,0x0},
  18.  
  19.     {0x8001,0x8001,0x8001,0x8001,0xc003,0xe007,0xf00f,0xf81f,
  20.     0xf81f,0xf00f,0xe007,0xc003,0x8001,0x8001,0x8001,0x8001,
  21.     0x0,0x3ffc,0x3ffc,0x2004,0x1008,0x810,0x420,0x240,
  22.     0x240,0x420,0x9d0,0x17e8,0x2ff4,0x3ffc,0x3ffc,0x0}};
  23.  
  24.  
  25. void setpointer(char far *ptr)
  26. {
  27.   struct REGPACK regs;
  28.  
  29.   regs.r_ax = 9;    /* set mouse pointer shape */
  30.   regs.r_bx = 8;
  31.   regs.r_cx = 1;
  32.   regs.r_dx = FP_OFF(ptr);
  33.   regs.r_es = FP_SEG(ptr);
  34.   intr(0x33,®s);
  35. }
  36.  
  37. void setmousepage(int z)
  38. {
  39.   union REGS regs;
  40.  
  41.   regs.x.ax = 0x1d;    /* Set mouse pointer page */
  42.   regs.x.bx = z;
  43.   int86(0x33,®s,®s);
  44. }
  45.  
  46. int initmouse()
  47. {
  48.   union REGS reg;
  49.  
  50.   reg.x.ax = 0x0;    /* reset mouse */
  51.   int86(0x33,®,®);
  52.   return reg.x.ax;
  53. }
  54.  
  55. void showmouse()
  56. {
  57.   union REGS reg;
  58.  
  59.   reg.x.ax = 0x1;    /* show mouse cursor */
  60.   int86(0x33,®,®);
  61. }
  62.  
  63. int huge Detect256(void)
  64. {
  65.   return 0;
  66. }
  67.  
  68. char *drivers[] = {"svga256m","svga32km","svga16m","twk16m","twk256m","egavga"};
  69.  
  70. main()
  71. {
  72.   int gd,gm;
  73.   int z;
  74.   char c;
  75.   int mod,mp,cp;
  76.   char buf[60];
  77.   int isMs;
  78.  
  79.   gd = DETECT;
  80.   printf("0:Svga256   1:Svga32k   2:Svga16   3:Twk16  4:Twk256  5:EGAVGA\n");
  81.   printf("dr>");
  82.   scanf("%d",&z);
  83.   if (z > 5) z = 5;
  84.   if (z != 5) gd = installuserdriver(drivers[z],Detect256);
  85.   printf("Enter mode (-1 detects max mode):\n>");
  86.   scanf("%d",&gm);
  87.   if (gm < 0) {
  88.     gm = 6;
  89.     do {
  90.       initgraph(&gd,&gm,"");
  91.       gm--;
  92.     } while (graphresult() != grOk);
  93.   }
  94.   else
  95.     initgraph(&gd,&gm,"");
  96.   gd = graphresult();
  97.   if (gd != grOk) {
  98.     printf("Error initializing driver! (%s)\n",grapherrormsg((char)gd));
  99.     exit(1);
  100.   }
  101.   mod = 0;
  102.   mp = 0;
  103.   cp = 0;
  104.   isMs = initmouse();
  105.   if (getmaxcolor() > 256) {
  106.     setfillstyle(BKSLASH_FILL,RealFillColor(RGB(24,0,0)));
  107.     setcolor(RealDrawColor(RGB(0,20,0)));
  108.   } else {
  109.     setrgbpalette(4,63,0,0);
  110.     setrgbpalette(15,63,63,63);
  111.     setrgbpalette(2,0,63,0);
  112.     setrgbpalette(1,0,0,63);
  113.     setfillstyle(BKSLASH_FILL,4);
  114.     setcolor(15);
  115.   }
  116.   setactivepage(1);
  117.   bar(0,0,getmaxx(),getmaxy());
  118.    if (getmaxcolor() > 256) {
  119.     setfillstyle(XHATCH_FILL,RealFillColor(RGB(0,24,0)));
  120.     setcolor(RealDrawColor(RGB(31,31,31)));
  121.   } else {
  122.     setfillstyle(XHATCH_FILL,2);
  123.     setcolor(15);
  124.   }
  125.   setactivepage(0);
  126.   bar(0,0,getmaxx(),getmaxy());
  127.   line(0,0,getmaxx(),getmaxy());
  128.   if (getmaxcolor() > 256) {
  129.     setfillstyle(SOLID_FILL,RealFillColor(RGB(0,0,0)));
  130.     setcolor(RealDrawColor(RGB(30,30,30)));
  131.   }
  132.   else {
  133.     setfillstyle(SOLID_FILL,0);
  134.     setcolor(15);
  135.   }
  136.   sprintf(buf,"Mode: %ux%ux%u",getmaxx()+1,getmaxy()+1,getmaxcolor()+1);
  137.   bar(0,0,188,60);
  138.   outtextxy(0,0,buf);
  139.   outtextxy(0,10,"Commands: ");
  140.   outtextxy(0,20,"p: Change visual page");
  141.   outtextxy(0,30,"c: Change mouse pointer");
  142.   outtextxy(0,40,"g: Change pointer page");
  143.   outtextxy(0,50,"q: Quit");
  144.   if (getmaxcolor() > 256)
  145.     setfillstyle(SOLID_FILL,RealFillColor(RGB(28,17,10)));
  146.   else
  147.     setfillstyle(SOLID_FILL,1);
  148.   bar(0,getmaxy()/2,getmaxx(),getmaxy());
  149.   if (isMs) {
  150.     showmouse();
  151.     z = 0;
  152.     while(!z) {
  153.       c = getch();
  154.       switch(c) {
  155.     case 'p':
  156.       mod++;
  157.       mod %= 2;
  158.       setvisualpage(mod);
  159.       break;
  160.     case 'c':
  161.       setpointer((char far *)cursor[cp]);
  162.       showmouse();
  163.       cp++;
  164.       cp %= 3;
  165.       break;
  166.     case 'g':
  167.       mp++;
  168.       mp %= 2;
  169.       setmousepage(mp);
  170.       break;
  171.     case 'q':
  172.       z = 1;
  173.       break;
  174.       }
  175.     }
  176.   }
  177.   closegraph();
  178. }