- 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 }