jbayer@ispi.UUCP (Jonathan Bayer) (06/15/89)
Greetings. I am currently implementing events in uEmacs 3.10 in order to be able to use a mouse. This is being done using the 2.3 development system on a 386. I have the mouse actions being read properly, including both movement and the buttons. I also am using the events to read the keyboard. Now the problem: When I change multiscreens using Alt-F?, and then return, the program hangs in ev_block(). It is as if the events are totally disconnected from the program and are never restored. I typed in the sample program which SCO has in the C library guide, and that seems to work without any problems. The only thing I can see is possibly the size of the program is having something to do with it. I tried compiling the program in 286 mode, large model as well as 386 mode; and got the same problem. The annoying item is that the program usemouse does not have this problem; however, usemouse changes the tty settings therefore making usemouse unusable. I have duplicated the relevent code below. Note that the program is definitely hanging in ev_block() because I put a debugging statement in to make sure that it wasn't in an endless loop. Any ideas? Please e-mail, and I will summarize to the net. JB Declarations: dmask_t dmask = D_STRING | D_REL; int ret, qfd; EVENT *evp; extern int ev_errlev; Code used to open the event queue: ev_errlev = 0; ret = ev_init(); if (ret >= 0) { mexist = TRUE; qfd = ev_open(&dmask); if (qfd < 0) mexist = FALSE; if (mexist) { qfd = ev_open(&dmask); if (qfd < 0) { ev_close(); mexist = FALSE; } else { dmask &= (D_STRING | D_REL); if (dmask != (D_STRING | D_REL) ) { mexist = FALSE; ev_close(); } } /* Events should be enqueued now */ } } Code used to read the event queue: while (1) { ret = ev_block(); evp = ev_read(); if (EV_TAG(*evp) & T_STRING) { kbdq = EV_BUF(*evp)[0] & 255; ev_pop(); return(kbdq); } else if (mouseflag) { ret = 0; if ( EV_DY(*evp) > 0) ret = SPEC | 'P'; if ( EV_DY(*evp) < 0) ret = SPEC | 'N'; if ( EV_DX(*evp) < 0) ret = SPEC | 'B'; if ( EV_DX(*evp) > 0) ret = SPEC | 'F'; ev_pop(); return (ret); } } -- Jonathan Bayer Beware: The light at the end of the Intelligent Software Products, Inc. tunnel may be an oncoming dragon 500 Oakwood Ave. ...uunet!ispi!root Roselle Park, NJ 07204 (201) 245-5922 jbayer@ispi.UUCP