Provided by: libsvga1-dev_1.4.3-33_amd64 

NAME
vga_waitevent - wait for various I/O events
SYNOPSIS
#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)
DESCRIPTION
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 occured.
EXAMPLES
If you want to wait blocking for a keypress OR a mouse event use: vga_waitevent(VGA_MOUSEEVENT |
VGA_KEYEVENT, NULL, NULL, NULL, NULL);
If you want to wait for a keypress OR a mouse event but non-blocking use:
#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, &timeout);
You could do a similar thing by just calling
mouse_update();
keyboard_update();
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().
BUGS
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.
SEE ALSO
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)
AUTHOR
This manual page was edited by Michael Weller <eowmob@exp-math.uni-essen.de>. 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
<H.Hanemaayer@inter.nl.net>.
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.
Svgalib (>= 1.2.11) 27 July 1997 vga_waitevent(3)