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的更多相关文章

  1. 感悟 GNU C 以及将 Vim 打造成 C/C++ 的半自动化 IDE

    C 语言在 Linux 系统中的重要性自然是无与伦比.不可替代,所以我写 Linux 江湖系列不可能不提 C 语言.C 语言是我的启蒙语言,感谢 C 语言带领我进入了程序世界.虽然现在不靠它吃饭,但是 ...

  2. 使用 GCC 和 GNU Binutils 编写能在 x86 实模式运行的 16 位代码

    不可否认,这次的标题有点长.之所以把标题写得这么详细,主要是为了搜索引擎能够准确地把确实需要了解 GCC 生成 16 位实模式代码方法的朋友带到我的博客.先说一下背景,编写能在 x86 实模式下运行的 ...

  3. 在 Linux 中使用 Eclipse 和 Gnu Autotools 管理 C/C++ 项目

    在我该系列的之前的所有随笔中,都是采用 Linux 发行版自带的包管理工具(如 apt-get.yum 等)进行软件的安装和卸载,从来没有向大家展示使用源代码自行编译安装软件的方法.但是长期混迹于 U ...

  4. GNU Readline 库及编程简介

    用过 Bash 命令行的一定知道,Bash 有几个特性: TAB 键可以用来命令补全 ↑ 或 ↓ 键可以用来快速输入历史命令 还有一些交互式行编辑快捷键: C-A / C-E 将光标移到行首/行尾 C ...

  5. GNU Radio Radar Toolbox

    GNU Radio Radar Toolbox Install guide Change to any folder in your home directory and enter followin ...

  6. 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. ...

  7. window下搭建c开发环境(GNU环境的安装)

    一.在windows平台上安装GNU环境 windows操作系统不自带GNU环境,如果需要开发跨平台的C语言程序,那么需要给windows安装GNU环境 windows下的两款GNU环境:MinGW和 ...

  8. GNU make使用变量⑤变量的引用、定义等

    在 Makefile 中,变量是一个名字(像是 C 语言中的宏),代表一个文本字符串(变量的值).在 Makefile 的目标.依赖.命令中引用变量的地方,变量会被它的值所取代(与 C 语言中宏引用的 ...

  9. ZeroMQ接口函数之 :zmq_pgm – ØMQ 使用PGM 进行可靠的多路传输

    ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html ——————————————————————————————————— ...

随机推荐

  1. Android源代码之DeskClock (一)

    一.概述 一直有read the fucking source code的计划,可是实行起来都是断断续续的.到如今也没有真正得读过多少Android的源代码(主要是懒的).如今回忆起来实在是非常羞愧, ...

  2. PHP问题Parse error: syntax error, unexpected end of file in

    检查一下你的php文件中是否存在这样的语法错误:<<php{>或者<?{?>以上两种写法都是有错误的,修改为下面的就可以了: <?php}?>

  3. grep:Binary file (standard input) matches

    grep "key" xxx.log时输出 Binary file xxx.log matches 百度了一下:grep觉得这是二进制文件.解决方式:grep -a. grep - ...

  4. MySQL Replication主从复制

    MySQL Replication:NySQL复制,MySQL的复制默认为异步工作模式   mysql的复制功能是mysql内置的,装上它之后就具备了这个功能,而mysql复制是mysql实现大规模高 ...

  5. block代码块介绍

    关于block的简单介绍 什么是block? Block是C语言的一个语法特性,同时也是C语言的运行时特性,它很像C中的函数指针,因为你可以像使用函数指针一样的去使用block对象:它也很像C++中的 ...

  6. myeclipse一些技巧

    ctrl+h-----------------查找字符串 ctrl+A 全选→ctrl+shift+f 代码格式化,排版 ctrl+shift+O  自动引用

  7. 修改android应用包名 分类: android 学习笔记 2015-07-16 22:48 4人阅读 评论(0) 收藏

    由于项目需要,要修改已经开发好的应用包名,这本身很简单,但是如果你没找到门道,可能会白白浪费许多时间. 修改包名有三个地方要改,这三个地方的修改一定要按顺序来,否则你可能会遇到许多不必要的麻烦. 1. ...

  8. easyui 常用代码

    最近在公司制作内部使用数据管理网页,用到了easyui,使用过程中发现与jquery的写法有比较多不一样的地方,趁现在有空,先做个笔记. (这里主要说明的是combobox的用法,其他的像textbo ...

  9. php+正则将字符串中的字母数字和中文分割

    原文出处 如果一段字符串中出现字母数字还有中文混排的情况,怎么才能将他们区分开呢,经过一番思索,得到了如下代码,分享给大家 如:$str="php如何将字 符串中322的字母数字sf f45 ...

  10. JAVAWEB 生成excel文字在一格显示两位不变成#号

    在用java生成excel的时候会发现这种问题, 如果是人家给的模板还好,如果不是模板,而是通过代码生成的话, 就需要进行处理了, 一个小单元格,如果是一位的话,如1-9显示没有问题,一旦是两位的话, ...