鼠标在UNIX系统中的应用程序中的使用( 二 )


#define MSE_BUTTON 0
#defing MSE_MOTION 1struct mouseinfo
unsigned char status;
charxmotion, ymotion;
};
/* Ioctl Command definitions */
#define MOUSEIOC ("M"<<8)
#define MOUSEIOCREAD (MOUSEI
OC| 60)
#define MOUSEIOCNDELAY (MOU
SEIOC| 81)【鼠标在UNIX系统中的应用程序中的使用】void (* s_quit)();
void (* s_intr)();
int fd;
void EXIT();
void main()
{
unsigned long a,b;
int i,j,status;
char buf[80];
struct mouseinfo mseinfo;
int xpos=1,ypos=1;
s_quit=signal(SIGQUIT,EXIT);
s_intr=signal(SIGINT,EXIT);
if((fd=open(″dev/mouse″,0_RD
WR))==-1){
perror(″不能打开鼠标设备文件!!!″);
exit(1);
}
printf(″33[1c″);/*设置光标为块方式/*
ioctl(fd,MOUSEIOCNDELAY,OL);
/*设置鼠标为非延迟等待方式*/
while(1){
ioctl(fd,MOUSEIOCREAD,&ms
einfo); /*读取鼠标状态信息*/
if(mseinfo.status&MOVEMENT){
xpos=xpos+mseinfo.xmotion;
if(xpos <=0)
xpos=1;
else
if(xpos >80)
xpos=80;
ypos=ypos+mseinfo.ymotion;
if(ypos <=0)
ypos=1;
else
if(ypos > 25)
ypos=25;
printf(″033[%d;%dH″,ypos,xpos);/*调整光标位置*/
fflush(stdout); /*刷新输出*/
}
if(mseinfo.status&BUTCHNGMASK){
if(mseinfo.status&BUT1CHNG){
if(mseinfo.status&BUT1STAT){
printf(″Left Depressed″);/*左键被按下*/
fflush(stdout);
}
else {
printf(″Left Relessed″);/*左键被释放*/
fflush(stdout);
}
}
if(mseinfo.status&BUT3CHNG){
if(mseinfo.status&BUT3STAT){
printf(″Right Depressed″); /*右键被按下*/
fflush(stdout);
}
else {
printf(″Right Relessed″);/*右键被释放*/
fflush(stdout);
}
}
}
}
}
void EXIT() /*本函数用于信号处理,实现整个程序的退出*/
{
close(fd);
printf(″33[0c″);
signal(SIGQUIT,s_quit);
signal(SIGINT,s_intr);
exit(0);
}
/*———程序结束————*/

推荐阅读