Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
vga_waitevent(3)	      Svgalib User Manual	      vga_waitevent(3)

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 un-
       derstanding 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	corre-
       sponding	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 al-
       ready 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 set-
       ting exactly the	bits for files that met	the conditions in  the	corre-
       sponding	fd_set structures. If a	non-NULL timeout is passed the remain-
       ing  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,	&time-
       out);

       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 capabili-
       ties 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 in-
       stead 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_getposi-
       tion_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-es-
       sen.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)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=vga_waitevent&sektion=3&manpath=FreeBSD+Ports+14.3.quarterly>

home | help