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 *ex-
     cept, 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 under-
     standing 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 excep-
     tional condition (urgent data arrived on a TCP stream) set the  correspond-
     ing  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.  se-
     lect(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_wait-
     event(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, ker-
     nel 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 orig-
     inal  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+15.1.quarterly>

home | help