Linux控制台下使用鼠标gpm
Linux控制台下使用鼠标的程序大家知道是gpm,今天看到一篇文章关于gpm编程的。
Linux程序设计入门 - gpm
理。Linux下文字界面的滑鼠几乎都是用gpm来处理。
gpm的文件在gpm原始码的doc目录中,详细的说明可叁考该目录中的文件gpm
programming guide,此处只提供给您KickStart的一些技巧及一些叁考说明。
特别注意到以下的范例,需在console下执行,不可在X Window的 Terminal下
执行。
范例 : gpm_mouse.c
gpm原始码中有一个mev.c的程序,主要用来测试滑鼠状态。事实上,mev.c是个
很好的范例,本范例便是取自mev.c,经过简化修改而来。
#include >stdio.h<
#include >stdlib.h<
#include >unistd.h<
#include >gpm.h<
void main(int argc,char **argv)
{
fd_set readset;
Gpm_Event event;
Gpm_Connect conn;
conn.eventMask = ~0;
conn.defaultMask = ~GPM_HARD;
conn.maxMod = 0;
conn.minMod = 0;
if (Gpm_Open(&conn,0)==-1) {
printf("Can not open mouse connection/n");
exit(1);
}
while (1) {
FD_ZERO(&readset);
FD_SET(gpm_fd,&readset);
select(gpm_fd+1,&readset,0,0,0);
if (FD_ISSET(gpm_fd,&readset)) {
if (Gpm_GetEvent(&event)<0) {
printf("mouse: event 0x%02X, at %2i %2i (delta %2i %2i),"
"button %i, modifiers 0x%02X/r/n",
event.type,
event.x,event.y,
event.dx,event.dy,
event.buttons,
event.modifiers
);
}
}
}
while (Gpm_Close());
}
编译
gcc -o gpm_mouse gpm_mouse.c -lgpm
检验结果
mouse: event 0x01, at 15 1 (delta -2 -1),button 0, modifiers 0x00
mouse: event 0x01, at 14 1 (delta -1 0),button 0, modifiers 0x00
mouse: event 0x01, at 13 1 (delta -1 0),button 0, modifiers 0x00
资料结构
typedef struct Gpm_Connect {
unsigned short eventMask, defaultMask;
unsigned short minMod, maxMod;
int pid;
int vc;
} Gpm_Connect;
enum Gpm_Etype {
GPM_MOVE=1,
GPM_DRAG=2, /* exactly one of the bare ones is active at a time
*/
GPM_DOWN=4,
GPM_UP= 8,
GPM_SINGLE=16, /* at most one in three is set */
GPM_DOUBLE=32,
GPM_TRIPLE=64, /* WARNING: I depend on the values */
GPM_MFLAG=128, /* motion during click? */
GPM_HARD=256, /* if set in the defaultMask, force an
already used event to pass over to another handler */
GPM_ENTER=512, /* enter event, user in Roi's */
GPM_LEAVE=1024 /* leave event, used in Roi's */
};
typedef struct Gpm_Event {
unsigned char buttons, modifiers; /* try to be a multiple of 4 */
unsigned short vc;
short dx, dy, x, y;
enum Gpm_Etype type;
int clicks;
enum Gpm_Margin margin;
} Gpm_Event;
typedef int Gpm_Handler(Gpm_Event *event, void *clientdata);
函数宣告
int Gpm_Open(Gpm_Connect * CONN, int FLAGS);
int Gpm_Close(void);
int Gpm_GetEvent(Gpm_Event * EVENT);
int Gpm_Getc(FILE * fp);
#define Gpm_Getchar() Gpm_Getc(stdin)
int Gpm_Wgetch();
#define Gpm_Getch() (Gpm_Wgetch(NULL))
int Gpm_Repeat (int millisecs);
int Gpm_DrawPointer (int X, int Y, int FD);
int GPM_DRAWPOINTER (Gpm_Event *EPTR;)
int Gpm_FitValuesM (int *X, int *Y, int MARGIN);
int Gpm_FitValues (X,Y);
Gpm_FitEvent (EPTR);
char *Gpm_GetLibVersion (int *where);
char *Gpm_GetServerVersion (int *where);
int Gpm_GetSnapshot (Gpm_Event *ePtr);
OK STATION, Webmaster, Brian Lin
【作者: Liberal】【访问统计:】【2007年10月26日 星期五 18:37】【注册】【打印】
本文介绍如何在Linux控制台环境下使用gpm进行鼠标事件处理。gpm作为文字模式下的鼠标驱动程序,在Linux控制台中扮演重要角色。文章通过一个简化后的示例程序详细解释了gpm的使用方法。
5884

被折叠的 条评论
为什么被折叠?



