home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_300 / 301_01 / ms.c < prev    next >
C/C++ Source or Header  |  1989-12-30  |  3KB  |  99 lines

  1. /*
  2.  * Mouse routines adapted from C User's Journal 
  3.  * by Andrew Markley, Sept/Oct 1988, page 88
  4.  *
  5.  * Additional services and interface routines
  6.  * added by Mark Johnson, Oct 1989
  7.  */
  8.  
  9.  
  10. #include <dos.h>
  11.  
  12. #define MOUSE_RESET      0 /* Mouse Service 0                            */
  13. #define MOUSE_ON         1 /* Service 1                                  */
  14. #define MOUSE_OFF        2 /* 2                                          */
  15. #define MOUSE_STATUS     3 /* 3                                          */
  16. #define MOUSE_SET        4 /* 4                                          */
  17. #define MOUSE_PRESSED    5 /* 5                                          */
  18. #define MOUSE_RELEASED   6 /* 6                                          */
  19. #define MOUSE_COLMAX     7 /* 7                                          */
  20. #define MOUSE_ROWMAX     8 /* 8                                          */
  21. #define MOUSE_GIMAGE     9 /* 9                                          */
  22. #define MOUSE_TIMAGE    10 /* 10                                         */
  23. #define MOUSE_MOTION    11 /* 11 - get mouse motion in cx,dx         */
  24. #define MOUSE_SETSPEED    15 /* 15 - set micky-to-pixel ratio              */
  25.  
  26. /* Used to test BX after Service 3                                       */
  27. #define LEFTBUTTON       1
  28. #define RIGHTBUTTON      2
  29. #define BOTHBUTTONS      LEFTBUTTON|RIGHTBUTTON
  30.  
  31. /* Used with Service 5 and 6                                             */
  32. #define LEFT_STATUS      0
  33. #define RIGHT_STATUS     1
  34.  
  35. /* function declaration and prototyping per ANSI standards               */
  36. int mouse (int service, int *bx_register, int *cx_register, int *dx_register) {
  37.  
  38. struct REGS inregs, outregs;
  39.  
  40.     inregs.x.ax = service;
  41.     inregs.x.bx = *bx_register;
  42.     inregs.x.cx = *cx_register;
  43.     inregs.x.dx = *dx_register;
  44.     int86 (51, &inregs, &outregs);
  45.     *bx_register = outregs.x.bx;
  46.     *cx_register = outregs.x.cx;
  47.     *dx_register = outregs.x.dx;
  48.     return (outregs.x.ax);
  49. }
  50.  
  51. void install_cursor_image (int picture [16][2]) {
  52. struct SREGS segregs;
  53. struct REGPACK regpak;
  54.  
  55.     segread (&segregs);
  56.     regpak.r_ax = MOUSE_GIMAGE;
  57.     regpak.r_bx = 0;
  58.     regpak.r_cx = 0;
  59.     regpak.r_dx = (int) picture;
  60.     regpak.r_es = segregs.ds;
  61.     intr (51, ®pak);
  62. }
  63.  
  64. int mouse (int, int *, int *, int *);
  65. void install_cursor_image (int [16][2]);
  66.  
  67. /* following interface routines added by Mark Johnson */
  68.  
  69. ms_init() {
  70.     int junk = 0;
  71.     return mouse(MOUSE_RESET, &junk, &junk, &junk);
  72. }
  73.  
  74. ms_hbounds(xlow, xhigh) {
  75.     int junk = 0;
  76.     return mouse(MOUSE_COLMAX, &junk, &xlow, &xhigh);
  77. }
  78.  
  79. ms_vbounds(ylow, yhigh) {
  80.     int junk = 0;
  81.     return mouse(MOUSE_ROWMAX, &junk, &ylow, &yhigh);
  82. }
  83.  
  84. ms_button() {
  85.     int btn, junk = 0;
  86.     mouse(MOUSE_STATUS, &btn, &junk, &junk);
  87.     return btn;
  88. }
  89.  
  90. ms_motion(xp, yp) int *xp, *yp; {
  91.     int junk;
  92.     return mouse(MOUSE_MOTION, &junk, xp, yp);
  93. }
  94.  
  95. ms_setspeed(xrat, yrat) {
  96.     int junk;
  97.     return mouse(MOUSE_SETSPEED, &junk, &xrat, &yrat);
  98. }
  99.