www.pudn.com > jpeg1.zip > MOUSE.C
/* MOUSE.C Mouse Functions */ /* Written in TURBO C V2.0 1-16-1995 */ /* 鼠标函数实现 */ #include#include #include "mouse.h" char Reset() /* 鼠标复位 */ { inr.x.ax=0; int86(0x33,&inr,&outr); if(outr.x.ax==0) { M_FLAG=OFF; return(0); } else { M_FLAG=ON; return(1); } } /* 鼠标按键状态查询 */ char Left_Pressed() { if(M_FLAG==ON) { inr.x.ax=3; int86(0x33,&inr,&outr); return(outr.x.bx&1); } else return 0; } char Mid_Pressed() { if(M_FLAG==ON) { inr.x.ax=3; int86(0x33,&inr,&outr); return(outr.x.bx&4); } else return 0; } char Right_Pressed() { if(M_FLAG==ON) { inr.x.ax=3; int86(0x33,&inr,&outr); return(outr.x.bx&2); } else return 0; } /* 鼠标位置查询 */ void Get_XY(int *x,int *y) { if(M_FLAG==ON) { inr.x.ax=3; int86(0x33,&inr,&outr); *x=outr.x.cx; *y=outr.x.dx; } else { *x=0; *y=0; } } /* 置光标位置 */ void Set_XY(int x,int y) { if(M_FLAG==ON) { inr.x.ax=4; inr.x.cx=x; inr.x.dx=y; int86(0x33,&inr,&outr); } } /* 设置光标范围 */ void Set_X_Range(int min,int max) { if(M_FLAG==ON) { inr.x.ax=7; inr.x.cx=min; inr.x.dx=max; int86(0x33,&inr,&outr); } } void Set_Y_Range(int min,int max) { if(M_FLAG==ON) { inr.x.ax=8; inr.x.cx=min; inr.x.dx=max; int86(0x33,&inr,&outr); } } /* 鼠标移动检测 */ int Motion(int *x,int *y) { if(M_FLAG==ON) { inr.x.ax=11; int86(0x33,&inr,&outr); *x=outr.x.cx; *y=outr.x.dx; return(*x||*y); } else return 0; } /* 标准模式下设置图形光标形状 */ void Set_Graphic_Cursor(int x,int y,unsigned int *pattern) { if(M_FLAG==ON) { inr.x.ax=9; inr.x.bx=x; inr.x.cx=y; inr.x.dx=FP_OFF(pattern); sireg.es=FP_SEG(pattern); int86x(0x33,&inr,&outr,&sireg); } } /* 鼠标位置检测 */ int Mouse_in_Box(int *b) { if(M_FLAG==ON) { inr.x.ax=3; int86(0x33,&inr,&outr); return((outr.x.cx>=b[0])&&(outr.x.cx<=b[2])&& (outr.x.dx>=b[1])&&(outr.x.dx<=b[3]))?1:0; } else return 0; } /* 扩展模式下图形光标作图 */ int Draw_Cursor(int x,int y) { unsigned long a; char i,j; unsigned int loc,block; unsigned char huge *dot,far *buf,huge *q; switch(CURSOR) { /* 光标位图索引 */ case IDC_WAIT : dot=MK_FP(BitMap,11878+8*1418+1078); break; /* 计时沙漏 */ case IDC_CURSOR : dot=MK_FP(BitMap,11878+8*1418+2102+1078); break; /* 标准箭头 */ case IDC_HAND : dot=MK_FP(BitMap,11878+8*1418+2102*2+1078); break; /* 手形 */ } a=(unsigned long)y*DIMX+x; /* 直接写屏 */ block=(unsigned long)a>>16; a&=0xffff; buf=MK_FP(0xA000,(unsigned int)a); outportb(0x3c4,0x0e); outportb(0x3c5,block^2); for(i=0;i