#include <stdio.h>
#include <gpm.h>

int Roi_fuer_Berreich(Gpm_Event *event, char *data)
{
  printf("Ereignis in der \"Region of Interest\" auf Planeten Erde ");
  printf(" an Position ->%d<- ->%d<- \n", event->x, event->y);
  if(data != NULL)
       printf("%s\n",data);
  return 0;
}

int Ein_weiterer_Roi_Berreich(Gpm_Event *event, char *data)
{
  printf("Ereignis in der \"Region of Interest\" auf Pluto");
  printf(" an Position ->%d<- ->%d<- \n", event->x, event->y);
    if(data != NULL)
  printf("%s\n",data);
  return 0;
}

int Roi_ausserhalb_Berreich(Gpm_Event *event, void *data)
{
  printf("Diese Ereignis trat NICHT in der \"Region of Interest\" auf ");
  printf(" an Position ->%d<- ->%d<- \n", event->x, event->y);
  return 0;
}

int main()
{
  Gpm_Connect connect;
  Gpm_Roi *roi, *roi2;
  char zeichen=0;
  char erde[] = "Hallo Pluto hier Erde";
  char pluto[] = "Hallo Erde take it easy";

  connect.eventMask =~0;
  connect.defaultMask=0;
  connect.minMod=0;
  connect.maxMod=~0;

  if(Gpm_Open(&connect, 0) == -1) /*Verbinden mit Mausserver*/
    {
       fprintf(stderr, "Kann keine Verbindung zum Mausserver herstellen!!\n");
       exit(0);
    }

  gpm_visiblepointer=1; /*Mauszeiger immer sichtbar*/

/*Handler für 10 Zeilen und 30 Spalten an der linken oberen Ecke anlegen,
      ~0 = alle Mausereignisse, Handler ist die Funktion Roi_im_Berreich*/
  roi=Gpm_PushRoi(1,1,31,10,~0, Roi_fuer_Berreich, (void *)&erde);
/*Handler für einen weiteren Bereich ab Spalte 31 Zeile 10 bis Spalte 80 Zeile 25*/
  roi2=Gpm_PushRoi(31,10,80,25,~0,Ein_weiterer_Roi_Berreich , (void *)&pluto);
/*Jetzt noch einen Region of Interest - Handler einrichten der für den*/
/*   restlichen Bereich zuständig ist*/
  gpm_roi_handler=Roi_ausserhalb_Berreich;
/*Ereignisse lesen..........*/
  while(zeichen != 'e')
      zeichen = Gpm_Getc(stdin);

  Gpm_PopRoi(roi); /*Region of Interest wieder vom Stack entfernen*/
  Gpm_PopRoi(roi2);
  Gpm_Close();
  return 0;
}