GNU PGM
Linux程序设计入门 - gpm gpm是Linux console下的滑鼠驱动程序,它主要提供文字模式下的滑鼠事件处 理。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
GNU PGM的更多相关文章
- 感悟 GNU C 以及将 Vim 打造成 C/C++ 的半自动化 IDE
C 语言在 Linux 系统中的重要性自然是无与伦比.不可替代,所以我写 Linux 江湖系列不可能不提 C 语言.C 语言是我的启蒙语言,感谢 C 语言带领我进入了程序世界.虽然现在不靠它吃饭,但是 ...
- 使用 GCC 和 GNU Binutils 编写能在 x86 实模式运行的 16 位代码
不可否认,这次的标题有点长.之所以把标题写得这么详细,主要是为了搜索引擎能够准确地把确实需要了解 GCC 生成 16 位实模式代码方法的朋友带到我的博客.先说一下背景,编写能在 x86 实模式下运行的 ...
- 在 Linux 中使用 Eclipse 和 Gnu Autotools 管理 C/C++ 项目
在我该系列的之前的所有随笔中,都是采用 Linux 发行版自带的包管理工具(如 apt-get.yum 等)进行软件的安装和卸载,从来没有向大家展示使用源代码自行编译安装软件的方法.但是长期混迹于 U ...
- GNU Readline 库及编程简介
用过 Bash 命令行的一定知道,Bash 有几个特性: TAB 键可以用来命令补全 ↑ 或 ↓ 键可以用来快速输入历史命令 还有一些交互式行编辑快捷键: C-A / C-E 将光标移到行首/行尾 C ...
- GNU Radio Radar Toolbox
GNU Radio Radar Toolbox Install guide Change to any folder in your home directory and enter followin ...
- gnu coreutils-8.25 for win32 static - Beta
gnu.win32-coreutils-8.25.7z 2.7 Mb bc-1.06.tar.gz coreutils-8.25.tar.xz diffutils-3.5.tar.xz gawk-4. ...
- window下搭建c开发环境(GNU环境的安装)
一.在windows平台上安装GNU环境 windows操作系统不自带GNU环境,如果需要开发跨平台的C语言程序,那么需要给windows安装GNU环境 windows下的两款GNU环境:MinGW和 ...
- GNU make使用变量⑤变量的引用、定义等
在 Makefile 中,变量是一个名字(像是 C 语言中的宏),代表一个文本字符串(变量的值).在 Makefile 的目标.依赖.命令中引用变量的地方,变量会被它的值所取代(与 C 语言中宏引用的 ...
- ZeroMQ接口函数之 :zmq_pgm – ØMQ 使用PGM 进行可靠的多路传输
ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html ——————————————————————————————————— ...
随机推荐
- MySQL 一致性读 深入研究 digdeep博客学习
http://www.cnblogs.com/digdeep/p/4947694.html 一致性读,又称为快照读.使用的是MVCC机制读取undo中的已经提交的数据.所以它的读取是非阻塞的. 相关文 ...
- hadoop资料汇总(网上)
http://blog.csdn.net/fansy1990/article/list/3 全部是hadoop的,挺好. http://stackoverflow.com/ ...
- 判断IMEI或MEID是否合法
/*----------------------------------------------- * 判断此字串所代表的IMEI或MEID是否合法 * @param imei * @author H ...
- iOS 集合的深复制与浅复制
概念 对象拷贝有两种方式:浅复制和深复制.顾名思义,浅复制,并不拷贝对象本身,仅仅是拷贝指向对象的指针:深复制是直接拷贝整个对象内存到另一块内存中. 一图以蔽之 再简单些说:浅复制就是指针拷贝:深复制 ...
- PHP利用超级全局变量$_GET来接收表单数据。
我们在linux上用 touch php_get.html php_get.php创建两个文件. php_get.html文件的代码如下: <!doctype html> <html ...
- 零基础学习云计算及大数据DBA集群架构师【Linux系统环境及权限管理12.21-12.25】
从这周开始Linux的学习,老师是一位女老师,这到给了更多的信心,老师讲得很快,如果说只谈记命令的话是不多,但是要真正去理解,其实内容还是挺多的,我都是以老师讲的内容为主线,然后自己再看鸟哥的书做加深 ...
- codevs 2822爱在心中
不想吐槽题目.... /* K bulabula 算法(好像用哪个T bulabula更简单 然而我并不会 - -) 丑陋的处理cnt: Printf时 cnt中 ans[i][0]==1 的删掉 然 ...
- plsql 显式游标
显式游标的处理过程包括: 声明游标,打开游标,检索游标,关闭游标. 声明游标 CURSOR c_cursor_name IS statement; 游标相当于一个查询结果集,将查询的结果放在游标里,方 ...
- ORACLE每组只保留一条记录
删除同一组内其他记录 DELETE from memactivities a where exists(select 1 FROM (select Uuid,ci_no,lst_upd_ts,ROW_ ...
- 手势交互之GestureOverlayView
一种用于手势输入的透明覆盖层,可以覆盖在其他空间的上方,也可包含在其他控件 android.gesture.GestureOverlayView 获得手势文件 需要用GesturesBuilder,如 ...