Nowe posty

Autor Wątek: GPM + NONBLOCK getc  (Przeczytany 3245 razy)

Ksanderon

  • Gość
GPM + NONBLOCK getc
« dnia: 2012-08-20, 22:37:24 »
Hejka, miałem potrzebę dopisania na szybko obsługi myszki w pewnym programie cui. Mam dziwny problem- pewnie robię coś bardzo nie tak.

Żeby zilustrować problem napisałem minikod. Powinno to obsłużyć nieblokujący odczyt klawiatury(np. do klawiszy specjalnych- jest lepszy sposób?) oraz odczytywać pozycję myszki.

Jeśli zakomentuje się część związaną z gpm nieblokujący odczyt jest ok, myszka oczywiście nie działa.

Jeśli się odkomentuje to jego zachowanie jest nieprzewidywalne. W rxvt nie reaguje na mysz za to Gpm_Getc działa jak powinno czyli się nie blokuje. Pod tildą np. staje się blokujący jak zwykle ale za to myszka reaguje. O co z tym chodzi. Prosze nie odsyłać mnie do ncurses- nie o to mi chodzi że mozna to zrobić tylko dlaczego takie dziwne jest zachowanie. Dodam, że np. mysz i klawisze specjalne w takim mc działają mi na  równie dobrze na obu.

#include 
#include
#include
#include

int mouse_handler(Gpm_Event *event, void *data)
{
printf("mouse: %d %d %d\\n", event->type, event->x, event->y);
return 0;      
}


int main(int argc, char **argv)
{
Gpm_Connect conn;
int oldf = fcntl(0, F_GETFL, 0);

conn.eventMask=~0;
conn.defaultMask=0;
conn.minMod=0;
conn.maxMod=~0;

//gpm_handler = mouse_handler;

//if(Gpm_Open(&conn,0)==-1)printf("Cannot connect to mouse server\\n");
//else
{

fcntl(stdin->_fileno, F_SETFL, oldf | O_NONBLOCK);
while(1)
{
//printf("%x",Gpm_Getc(stdin));
printf("%x",getc(stdin));
}
fcntl(stdin->_fileno, F_SETFL, oldf);
// Gpm_Close();
}

return 0;
}