ein Kapitel zurück                                           ein Kapitel weiter

Damit gpm überhaupt läuft müssen sie es natürlich installierst haben. Vor allem auch die libgpm. Falls nicht holen sie dies nach. Um eine Verbindung zum gpm-Dämon zu erstellen haben wir die Funktion.............

int Gpm_Open(Gpm_Connect *connect, int flag);  

Mit der Variable Gpm_Connect bestimmen welche Ereignisse wir bearbeiten wollen. Gpm_Connect ist eine eine Struktur und hat folgendes Aussehen..........

typedef struct Gpm_Connect
      {
        unsigned short eventMask, defaultMask;
        unsigned short minMod, maxMod;
        int pid;                          /* wird von gpm gefüllt*/
        int vc;                           /* "     "   "       " */
      }Gpm_Connect;  

Den Parameter flag können sie auf 0 setzen. Es sei denn sie wollen eine Verbindung mit einer bestimmten Konsole herstellen (Beispielsweise /dev/ttyn). vc bestimmt dabei die Nummer der Konsole.

Das Feld eventMask in der Struktur Gpm_Connect können sie Angeben welche Ereignisse gpm an unser Programm schicken soll. Folgende Flags können sie dabei für die Ereignismaske angeben..........

  • GPM_MOVE Maus wurde bewegt ohne das ein Knopf gedrückt wurde
  • GPM_DRAG Maus wurde bewegt während gleichzeitig ein Knopf betätigt wurde
  • GPM_UP Mausknopf wurde losgelassen
  • GPM_DOWN Mausknopf wurde gedrückt
  • GPM_HARD Wird diese Bit bei der defaultMask gesetzt wird das im Programm geschickte Ereignis auch an gpm geschickt was normalerweise nicht der Fall ist
  • GPM_LEAVE wird generiert wenn der Mauszeiger die Region of Interest verlässt (kommt noch)
  • GPM_ENTER wird generiert wenn der Mauszeiger in der Region of Interest ist (kommt noch)

Mit der Variable defaultMask in der Struktur Gpm_Connect bestimmen sie welche Ereignisse von gpm weiterverarbeitet werden sollen. Folgende Werte können sie hier z.B. verwenden.....

  • 0 Alle Mausereignisse werden an unser Programm geschickt oder von gpm nicht mehr beachtet.
  • ~eventMask gpm verarbeitet alle Ereignisse die wir bei eventMask nicht haben wollten
  • GPM_MOVE|GPM_HARD Alle Ereignisse werden weitergegeben die unser Programm nicht verarbeitet und alle Mausbewegungsereignisse.

Mit den beiden Variablen minMod und maxMod sind wir fähig Ereignisse aus Kombinationen von Mausknöpfen und Tastendrücke zu generieren. In minMod und maxMod geben stellen wir die die Tasten ein die beachtet werden sollen.........

  • minMod=0 && maxMod=0 gpm schickt unserem Programm nur Ereignisse bei denen keine Taste gedrückt wurde
  • minMod=0 && maxMod=~0 Programm bekommt alle Ereignisse bei denen eine Taste gedrückt wurde
  • minMod=1<<TASTE && maxMod<<TASTE Programm bekommt nur Mausereignisse bei den die TASTE gedrückt wurde.

Folgende Möglichkeiten haben sie für TASTE..............

KG_SHIFT, KG_CTRL, KG_ALT, KG_ALTGR, KG_SHIFTL, KG_SHIFTR, KG_CTRLL, KG_CTRLR, KG_CAPSSHIFT
  

Sie finden mehr zu diesen Konstanten in der Headerdatei <linux/keyboard.h>

  • minMod=1<<TASTE und maxMod=~0 Alle Ereignisse bei denen mindestens eine TASTE-Taste gedrückt wurde. (TASTE-Werte wie eben)

Jetzt wollen wir uns das ganze mal in der Praxis anschauen....... (linken sie zur Übersetzung die Lib gpm hinzu. Also..........



gcc -o connect_gpm connect_gpm.c -lgpm
  

/*Download:gpm1.c*/
#include <stdio.h> #include <gpm.h> int main() { int status; Gpm_Connect connect; connect.eventMask=~0; connect.defaultMask=0; connect.maxMod=0; connect.minMod=0; status=Gpm_Open(&connect, 0); /*Wir stellen ein Verbindung zu gpm her*/ if(status==-1) /*-1 bedeutet Verbindung kann nicht hergestellt werden*/ { fprintf(stderr, "Fehler bei Gpm_Open..........\n"); exit(0); } /*-2 bedeutet das das Programm im einem Xterm ausgeführt wird*/ else if(status==-2) printf("Das Programm läuft in einem Xterm-Fenster\n"); else printf("Das Programm läuft in einer Textkonsole\n"); Gpm_Close(); /*Wir beenden die Verbindung zu gpm-Dämon wieder*/ return 0; }

Sollte das Programm nicht mal im Textmodus funktionieren liegt es meist daran das der gpm Dämon noch nicht läuft starten sie diesem mit einem einfachen Aufruf von gpm. Mehr dazu unter man gpm.

Das Programm macht jetzt eigentlich noch nichts. Wir definieren hier nur kurz die Ereignisse. Anschließend wird versucht eine Verbindung mit dem gpm-Dämon herzustellen (Gpm_Open). Zum Schluss testen wir zuerst ob die Verbindung zu gpm geklappt hat (-1) oder ob die Verbindung unter einem Xterm (-2) läuft. Mit Gpm_Close beenden wir die Verbindung zum gpm-Dämon wieder.

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf