From: "Ben Peddell" Newsgroups: comp.os.msdos.djgpp References: Subject: Re: Using the mouse Lines: 108 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 5.00.2615.200 X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2615.200 Message-ID: Date: Thu, 3 Apr 2003 01:11:40 +1000 NNTP-Posting-Host: 144.139.175.146 X-Trace: newsfeeds.bigpond.com 1049296756 144.139.175.146 (Thu, 03 Apr 2003 01:19:16 EST) NNTP-Posting-Date: Thu, 03 Apr 2003 01:19:16 EST Organization: Telstra BigPond Internet Services (http://www.bigpond.com) To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com Eric Wajnberg wrote in message news:b6e7d6$o6b$1 AT saphir DOT jouy DOT inra DOT fr... > Dear all, > > I need your help with DJGPP. I am currently developing a C code, and, in it, I > need to know the location of the mouse, and if the left button is pressed or > not. That's all! > > I am sure that this can be coded in a couple of lines only. Can somone help > me? > > Best, Eric. > If you can, you should try to determine whether interrupt 0x33 has been initialized. An un-initialized int 0x33 will lead to problems (Page Faults, GPFs, etc) when you try to call it. These functions are just as an example. They would be better as assembly functions (in an S file). First, you must initialize the mouse. /* * initialize mouse * returns: * -1 if driver not installed * otherwise number of buttons (0 meaning unknown) */ int init_mouse (void){ REGS regs; regs.w.ax = 0; int86 (0x33, ®s, ®s); if (regs.w.ax == 0){ return -1; } else { if (regs.w.bx == 0xFFFF){ regs.w.bx = 2; /* 2 buttons */ } return regs.w.bx; } } Then, show or hide the mouse pointer as desired. /* * show mouse cursor * mouse driver implements a counter - multiple show * calls will require the same number of calls to hide * calls to hide the mouse pointer. */ void show_mouse (void) { REGS regs; regs.w.ax = 1; int86 (0x33, ®s, ®s); } /* * hide mouse pointer */ void hide_mouse (void) { REGS regs; regs.w.ax = 2; int86 (0x33, ®s, ®s); } You can find out the position and button status at any time after initializing the mouse. /* * get the position and button status * status: * bit 0: left button pressed if set * bit 1: right button pressed if set * bit 2: middle button pressed if set * could possibly have further bits on advanced mouse drivers. * position is (x, y) */ void get_mouse_pos_status (int *status, int *x, int *y) { REGS regs; regs.w.ax = 3; int86 (0x33, ®s, ®s); *status = regs.w.bx; *x = regs.w.cx; *y = regs.w.dx; } You can also set the mouse position. /* * set mouse position */ set_mouse_pos (int x, int y) { REGS regs; regs.w.ax = 4; regs.w.cx = x; regs.w.dx = y; int86 (0x33, ®s, ®s); } There are further functions that you can call. They are shown in Ralf Brown's Interrupt List.