Provided by: libsvga1-dev_1.4.3-31_i386 bug


       vga_waitevent - wait for various I/O events


       #include <sys/time.h>
       #include <sys/types.h>
       #include <unistd.h>
       #include <vga.h>

       int  vga_waitevent(int  which,  fd_set  *input, fd_set *output , fd_set
       *except, struct timeval *timeout)


       This is the only function allowing you to wait for keyboard  AND  mouse
       events.  It  is  based  on  the select(2) library function, so for deep
       understanding of vga_waitevent() look at select(2) as well.

       which can be  0  or  logical  ored  together  from  VGA_MOUSEEVENT  and
       VGA_KEYEVENT.   If  you  are interested in waiting for file descriptors
       having input available or being ready for new write data or being in an
       exceptional  condition  (urgent  data  arrived on a TCP stream) set the
       corresponding bits in the fd_set structures passed (see select(3)).  If
       you  want vga_waitevent() to return after a timeout value pass a struct
       timeval with the desired value.  If  you  are  not  interested  in  the
       corresponding events you may pass NULL for any of the pointers.

       If  NULL  is  passed  for timeout vga_waitevent() will not time out but
       block until any of the other events occurs.  If the integer returned is
       <  0 an error occurred. Check the global variable errno for details. If
       a  value  >=  0  is  returned  it  is  a  bitmask   constructed   using
       VGA_MOUSEEVENT and VGA_KEYEVENT to show which of these events occured.

       If  any  of  these  two  occured  the  appropriate update functions are
       already called by vga_waitevent().vga_waitevent() operates  in  raw  as
       well  as non-raw keyboard mode. In the latter case use vga_getch(3) not
       vga_getkey(3) to read the newly arrived keys.

       Any of the file related conditions  being  met  will  be  signalled  by
       setting  exactly  the  bits  for  files  that met the conditions in the
       corresponding fd_set structures. If a non-NULL timeout  is  passed  the
       remaining  time  is  written  into  it on return.  If it is 0 a timeout
       occured. (again:  cf.   select(2))  Therefore,  depending  on  context,
       vga_waitkey(3)  may  return  0  if  only  special,  non svgalib, events


       If you want to wait blocking for a  keypress  OR  a  mouse  event  use:

       If  you  want  to wait for a keypress OR a mouse event but non-blocking

       #include <sys/time.h>
       #include <sys/types.h>
       #include <unistd.h>
       #include <vga.h>

       struct timeval timeout;
       timeout.tv_sec = 0;
       timeout.tv_usec = 0;
       vga_waitevent(VGA_MOUSEEVENT  |   VGA_KEYEVENT,   NULL,   NULL,   NULL,

       You could do a similar thing by just calling


       though. There is no such counterpart for the first example.

       Finally,   there   is  a  very  nice  eventtest(6)  demo  showing  most
       capabilities of vga_waitevent().


       This function was introduced in 1.2.10. Unfortunately there was a  typo
       in  the first implementation which broke the case where input was NULL.
       Though fixed in 1.2.11 for optimal portability  pass  an  empty  fd_set
       instead of NULL as first argument.

       When not running in background mode, that is, the svgalib applcation is
       suspended while the VC is switched away, it  seems  vga_waitevent  gets
       stuck and does no longer timeout. It is not clear if this is an svgalib
       bug, kernel bug or general problem.


       svgalib(7),       vgagl(7),       libvga.config(5),       eventtest(6),
       mouse_getposition_6d(3),         mouse_getx(3),        mouse_update(3),
       mouse_waitforupdate(3), vga_getkey(3), vga_getch(3)


       This manual page was edited  by  Michael  Weller  <eowmob@exp-math.uni->.  The  exact  source of the referenced function as well as of
       the original documentation is unknown.

       It is very likely that both are at least to some extent are due to Harm
       Hanemaayer <>.

       Occasionally  this  might be wrong. I hereby asked to be excused by the
       original author and will happily accept any additions or corrections to
       this first version of the svgalib manual.