- I sometimes in the DOSBox work with Turbo C, any problem with mouse handling was not found. Maybe you are using the wrong mouse handling code?
Copy code to clipboard 1
2 /* MOUSE.C
3 * (C) 1990 by VytRa
4 * Kaunas, Lithuania
5 */
6
7 #include <stdio.h>
8 #include <dos.h>
9 #include <conio.h>
10 #include "mouse.h"
11
12 char ScreenHeight,ScreenWidth,MouseInstalled,MouseCursorOn,
13 MouseXLo,MouseXHi,MouseYLo,MouseYHi,MouseEvent,
14 MouseStatus,MouseLastX,MouseLastY;
15
16 struct{
17 unsigned Segm;
18 unsigned Ofst;}MouseRoutine;
19
20 void
21 InitializeMouse(void){
22 union REGS regs;
23 struct SREGS sregs;
24 disable();
25 MouseCursorOn=MouseInstalled=0;
26 regs.x.ax=0x3533;
27 int86x(0x21,®s,®s,&sregs);
28 if((sregs.es | regs.x.bx)==NULL)
29 goto ret;
30 regs.x.ax=0;
31 int86(0x33,®s,®s);
32 if(regs.x.ax == 0)
33 goto ret;
34 MouseInstalled++;
35 MouseRoutine.Segm=MouseRoutine.Ofst=MouseStatus=MouseEvent=0;
36 ScreenHeight=25,ScreenWidth=80;
37 ret: enable();
38 }
39
40 void
41 ShowMousePrim(void){
42 union REGS regs;
43 if(MouseInstalled==0) return;
44 disable();
45 regs.x.ax=1;
46 int86(0x33,®s,®s);
47 MouseCursorOn++;
48 enable();
49 }
50
51 void
52 HideMousePrim(void){
53 union REGS regs;
54 if(MouseInstalled==0) return;
55 disable();
56 MouseCursorOn=0;
57 if(MouseInstalled){
58 regs.x.ax=2;
59 int86(0x33,®s,®s);}
60 enable();
… Show last 126 lines 61 }
62
63 short
64 ScaleDownX(short x){
65 if(ScreenWidth==39)
66 x>>=4;
67 else x>>=3;
68 return(x-=MouseXLo);
69 }
70
71 short
72 ScaleDownY(short y){
73 y>>=3;
74 return(y-=MouseYLo);
75 }
76
77 short
78 ScaleUpX(short x){
79 if(ScreenWidth==39)
80 return((x<<4)+7);
81 else return((x<<3)+3);
82 }
83
84 short
85 ScaleUpY(short y){
86 return((y<<3)+3);
87 }
88
89 void
90 MouseWindow(short XLo,short YLo,short XHi,short YHi){
91 union REGS regs;
92 if(MouseInstalled==0) return;
93 if(XLo>XHi || XHi>ScreenWidth || YLo>YHi || YHi>ScreenHeight)
94 return;
95 disable();
96 MouseXLo=XLo,MouseYLo=YLo,MouseXHi=XHi,MouseYHi=YHi;
97 regs.x.cx=ScaleUpX(XLo);
98 regs.x.dx=ScaleUpX(XHi);
99 regs.x.ax=0x7;
100 int86(0x33,®s,®s);
101 regs.x.cx=ScaleUpY(YLo);
102 regs.x.dx=ScaleUpY(YHi);
103 regs.x.ax=0x8;
104 int86(0x33,®s,®s);
105 enable();
106 }
107
108 void
109 MouseGotoXY(char MouseX,char MouseY){
110 union REGS regs;
111 char x,y;
112 if(MouseInstalled==0) return;
113 if((y=MouseY+MouseYLo)>MouseYHi || (x=MouseX+MouseXLo)>MouseXHi)
114 return;
115 disable();
116 regs.x.cx=ScaleUpX(x);
117 regs.x.dx=ScaleUpY(y);
118 regs.x.ax=4;
119 int86(0x33,®s,®s);
120 enable();
121 }
122
123 short
124 MouseButtonReleased(char Button,char *LastX, char *LastY){
125 union REGS regs;
126 if(MouseInstalled==0) return(0);
127 disable();
128 regs.x.bx=Button;
129 regs.x.ax=6;
130 int86(0x33,®s,®s);
131 *LastX=ScaleDownX(regs.x.cx);
132 *LastY=ScaleDownY(regs.x.dx);
133 enable();
134 return(regs.x.bx);
135 }
136
137 void
138 SetMickeyToPixelRatio(short Horizontal,short Vertical){
139 union REGS regs;
140 if(MouseInstalled==0) return;
141 disable();
142 regs.x.cx=Horizontal;
143 regs.x.dx=Vertical&0x7fff;
144 regs.x.ax=15;
145 int86(0x33,®s,®s);
146 enable();
147 }
148
149 short
150 MouseWhereX(void){
151 union REGS regs;
152 if(MouseInstalled==0) return(wherex());
153 disable();
154 regs.x.ax=3;
155 int86(0x33,®s,®s);
156 enable();
157 return(ScaleDownX(regs.x.cx));
158 }
159
160 short
161 MouseWhereY(void){
162 union REGS regs;
163 if(MouseInstalled==0) return(wherex());
164 disable();
165 regs.x.ax=3;
166 int86(0x33,®s,®s);
167 enable();
168 return(ScaleDownX(regs.x.dx));
169 }
170
171 short
172 MouseWhereXY(char *MouseXvar,char *MouseYvar){
173 union REGS regs;
174 if(MouseInstalled==0){
175 *MouseXvar=wherex();
176 *MouseYvar=wherey();
177 return(NULL);}
178 disable();
179 regs.x.ax=3;
180 int86(0x33,®s,®s);
181 *MouseXvar=ScaleDownX(regs.x.cx);
182 *MouseYvar=ScaleDownY(regs.x.dx);
183 enable();
184 return(regs.x.bx);
185 }