#include <stdio.h>
#include <gpm.h>
#include <linux/keyboard.h>

int my_handler(Gpm_Event *event, void *data)
{
  gpm_visiblepointer=1;
  if(event->type & GPM_DOWN) /*wurde eine Moustaste gedrückt*/
    {
      if(event->modifiers & (1 << KG_SHIFT))
         printf("Beide Shift + ");
      if(event->modifiers & (1 << KG_CTRL))
         printf("Beide Ctrl + ");
      if(event->modifiers & (1 << KG_ALT))
         printf("Linke Alt + ");
      if(event->modifiers & (1 << KG_ALTGR))
         printf("Rechte Alt + ");
      if(event->modifiers & (1 << KG_SHIFTL))
         printf("Linke Shift + ");
      if(event->modifiers & (1 << KG_SHIFTR))
         printf("Rechte Shift + ");
      if(event->modifiers & (1 << KG_CTRLL))
         printf("Linke Ctrl + ");
      if(event->modifiers & (1 << KG_SHIFTR))
         printf("Rechte Ctrl + ");
      if(event->modifiers & (1 << KG_CAPSSHIFT))
         printf("Capslock + ");
      if(event->buttons & GPM_B_LEFT)
         printf(" Linker Mousebutton\n");
      if(event->buttons & GPM_B_RIGHT)
         printf(" Rechter Mousebutton\n");
      if(event->buttons & GPM_B_MIDDLE)
         printf(" Mittlerer Mousebutton\n ");
     }
  return 0;
}

int main()
{
  Gpm_Connect connect;
  int c;
/*Wir interessieren uns für eine gedrückte Maustaste*/
  connect.eventMask = GPM_DOWN;
/*Alle Ergebnisse weitergeben die unser Programm nicht verarbeitet*/
  connect.defaultMask = GPM_MOVE;
/*Alle Ereignisse bei denen mindestens eine  Shift-Taste gedrückt wurde*/
  connect.minMod = 1 << KG_SHIFT;
  connect.maxMod = ~0;

  if(Gpm_Open(&connect, 0) == -1) {
      printf("Kann keine Verbindung zum Mouseserver herstellen\n");
      exit(0);
     }
  gpm_handler = my_handler;
  while((c = Gpm_Getc(stdin)) != EOF)
       printf("%d\n", c);
  Gpm_Close();
  return 0;
}