home *** CD-ROM | disk | FTP | other *** search
/ ProfitPress Mega CDROM2 …eeware (MSDOS)(1992)(Eng) / ProfitPress-MegaCDROM2.B6I / GRAPHICS / MISC / STK100.ZIP / STKSRC.COM / MOUSE.C < prev    next >
Encoding:
C/C++ Source or Header  |  1990-10-20  |  5.1 KB  |  227 lines

  1. /**********************************************************************
  2. * mouse.c
  3. * The mouse interface through INT 33.
  4. **********************************************************************
  5.                     This file is part of
  6.  
  7.          STK -- The sprite toolkit -- version 1.0
  8.  
  9.               Copyright (C) Jari Karjala 1990
  10.  
  11. The sprite toolkit (STK) is a FreeWare toolkit for creating high
  12. resolution sprite graphics with PCompatible hardware. This toolkit 
  13. is provided as is without any warranty or such thing. See the file
  14. COPYING for further information.
  15.  
  16. **********************************************************************/
  17.  
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #include <dos.h>
  21. #include <graphics.h>
  22.  
  23. #define NO_EXTERNS
  24. #include "mouse.h"
  25.  
  26. /** first mask, then shape, must be words **/
  27.  
  28. MOUSE_POINTER mouse_pointer_arrow = { /* HotSpot 1,1 */
  29.     0x3FFF,0x1FFF,0x0FFF,0x07FF,0x03FF,0x01FF,
  30.     0x00FF,0x007F,0x003F,0x001F,0x01FF,0x10FF,
  31.     0x30FF,0xF87F,0xF87F,0xF87F,
  32.  
  33.     0x0000,0x4000,0x6000,0x7000,0x7800,0x7C00,
  34.     0x7E00,0x7F00,0x7F80,0x7C00,0x6C00,0x4600,
  35.     0x0600,0x0300,0x0300,0x0000,
  36. };
  37.  
  38. MOUSE_POINTER mouse_pointer_hourglass = {
  39.     0x0001,0x0001,0x8003,0xC007,0xC007,0xE00F,
  40.     0xF01F,0xF83F,0xF83F,0xF01F,0xE00F,0xC007,
  41.     0xC007,0x8003,0x0001,0x0001,
  42.  
  43.     0x0000,0x7FFC,0x3FF8,0x1010,0x1010,0x0820,
  44.     0x0440,0x0280,0x0280,0x0440,0x0920,0x1390,
  45.     0x17D0,0x3FF8,0x7FFC,0x0000,
  46. };
  47.  
  48. MOUSE_POINTER mouse_pointer_cross = {
  49.     0xFFFF,0xFFFF,0xFEFF,0xFC7F,0xFC7F,0xFC7F,
  50.     0xC007,0x8003,0xC007,0xFC7F,0xFC7F,0xFC7F,
  51.     0xFEFF,0xFFFF,0xFFFF,0xFFFF,
  52.  
  53.     0x0000,0x0000,0x0000,0x0100,0x0100,0x0100,
  54.     0x0100,0x3EF8,0x0100,0x0100,0x0100,0x0100,
  55.     0x0000,0x0000,0x0000,0x0000,
  56.  
  57. };
  58.  
  59. /* Initialize mouse driver, return the number of buttons or 0 if no driver */
  60. int mouse_driver_init(void)
  61. {
  62.     struct REGPACK regs;
  63.     
  64.     regs.r_ax = 0;
  65.     regs.r_bx = 0;
  66.     intr(0x33,®s);
  67.     if (regs.r_ax==0)
  68.         return 0;
  69.     else
  70.         return regs.r_bx;
  71. }
  72.  
  73. void mouse_show_pointer(void)
  74. {
  75.     struct REGPACK regs;
  76.     regs.r_ax = 1;
  77.     intr(0x33,®s);
  78. }
  79.  
  80. void mouse_hide_pointer(void)
  81. {
  82.     struct REGPACK regs;
  83.     regs.r_ax = 2;
  84.     intr(0x33,®s);
  85. }
  86.  
  87. void mouse_get_pointer_xy(int *x, int *y)
  88. {
  89.     struct REGPACK regs;
  90.     regs.r_ax = 3;
  91.     intr(0x33,®s);
  92.     *x = regs.r_cx;
  93.     *y = regs.r_dx;
  94. }
  95.  
  96. void mouse_get_rel_pointer_xy(int *x, int *y)
  97. {
  98.     struct REGPACK regs;
  99.     regs.r_ax = 11;
  100.     intr(0x33,®s);
  101.     *x = regs.r_cx;
  102.     *y = regs.r_dx;
  103. }
  104.  
  105. int mouse_get_buttons(void)
  106. {
  107.     struct REGPACK regs;
  108.     regs.r_ax = 3;
  109.     intr(0x33,®s);
  110.     return regs.r_bx;
  111. }
  112.  
  113. int mouse_get_presses(int buttons)
  114. {
  115.     struct REGPACK regs;
  116.     regs.r_ax = 5;
  117.     regs.r_bx = buttons;
  118.     intr(0x33,®s);
  119.     return regs.r_bx;
  120. }
  121.  
  122. int mouse_get_releases(int buttons)
  123. {
  124.     struct REGPACK regs;
  125.     regs.r_ax = 6;
  126.     regs.r_bx = buttons;
  127.     intr(0x33,®s);
  128.     return regs.r_bx;
  129. }
  130.  
  131. void mouse_set_pointer_xy(int x, int y)
  132. {
  133.     struct REGPACK regs;
  134.     regs.r_ax = 4;
  135.     regs.r_cx = x;
  136.     regs.r_dx = y;
  137.     intr(0x33,®s);
  138. }
  139.  
  140. void mouse_set_sensitivity(int x, int y)
  141. {
  142.     struct REGPACK regs;
  143.     regs.r_ax = 15;
  144.     regs.r_cx = x;
  145.     regs.r_dx = y;
  146.     intr(0x33,®s);
  147. }
  148.  
  149. void mouse_set_pointer_window(int a, int b, int c, int d)
  150. {
  151.     struct REGPACK regs;
  152.     regs.r_ax = 7;
  153.     regs.r_cx = a; regs.r_dx = c;
  154.     intr(0x33,®s);
  155.     regs.r_ax = 8;
  156.     regs.r_cx = b; regs.r_dx = d;
  157.     intr(0x33,®s);
  158. }
  159.  
  160. void mouse_disable_pointer_window(int a, int b, int c, int d)
  161. {
  162.     struct REGPACK regs;
  163.     
  164.     regs.r_ax = 16;
  165.     regs.r_cx = a; regs.r_dx = b; regs.r_si = c; regs.r_di = d;
  166.     intr(0x33,®s);
  167. }
  168.  
  169.  
  170. void mouse_set_pointer_shape(int HotX, int HotY, MOUSE_POINTER shape)
  171. {
  172.     struct REGPACK regs;
  173.     regs.r_ax = 9;
  174.     regs.r_bx = HotX; 
  175.     regs.r_cx = HotY;
  176.    #if    defined(_LARGE_) || defined(_HUGE_) || defined(_COMPACT_)
  177.     regs.r_dx = FP_OFF(shape); 
  178.     regs.r_es = FP_SEG(shape); 
  179.     regs.r_ds = FP_SEG(shape);
  180.    #else
  181.     regs.r_dx = FP_OFF(shape); 
  182.     regs.r_es = _DS; 
  183.     regs.r_ds = _DS;
  184.    #endif
  185.     intr(0x33,®s);
  186. }
  187.  
  188. void mouse_set_light_pen(int a)
  189. {
  190.     struct REGPACK regs;
  191.     if (a == 0) 
  192.         regs.r_ax = 14;
  193.     else 
  194.         regs.r_ax = 13;
  195.     intr(0x33,®s);
  196. }
  197.  
  198. /** not tested **/
  199. void mouse_set_event_handler(int mask, void far (*proc)())
  200. {
  201.     struct REGPACK regs;
  202.     regs.r_ax = mask;
  203.     regs.r_es = FP_SEG(proc);  regs.r_dx = FP_OFF(proc);
  204.     intr(0x33,®s);
  205. }
  206.   
  207.  
  208. /**********************************************************************
  209. * Initialize the mouse driver, set the pointer shape and pointer window.
  210. * Return: the number of buttons or 0 if no mouse detected
  211. **********************************************************************/
  212. int mouse_initialize(void)
  213. {
  214.     int Buttons;
  215.     
  216.     Buttons = mouse_driver_init();
  217.     if (Buttons!=0) {
  218.         mouse_set_pointer_window(0,0,getmaxx(),getmaxy());
  219.         mouse_set_pointer_shape(1,1,mouse_pointer_arrow);
  220.         mouse_set_light_pen(0);
  221.         mouse_show_pointer();
  222.     }
  223.     return Buttons;
  224. }
  225.  
  226.