Provided by: libsvga1-dev_1.4.3-33_amd64 bug

NAME

       joystick_init - open a joystick

SYNOPSIS

       #include <vgajoystick.h>
       typedef void (*__joystick_output) (const char *msg);

       int joystick_init(int joydev, __joystick_output jo);

DESCRIPTION

       This  function  opens  a joystick device. A negative value is returned on failure, otherwise the joystick
       was initialized.  svgalib(7) supports several joysticks. The  corresponding  device  node  names  can  be
       configured in libvga.config(5).

       The joydev parameter indicates which joystick is to be initialized. As of this writing svgalib support up
       to  four  joysticks joydev = 0 to joydev = 3, although I'm not aware of hardware and kernel drivers which
       handle more than joysticks 0 and 1.

       It is strongly encouraged that your program allows the user to calibrate the joystick. This is controlled
       by the jo parameter. If it is NULL, no calibration is performed. Otherwise, calibration is performed  and
       instructions  are  printed to the user by calling the user supplied jo function. It is the responsibility
       of this function to print the NUL and NL terminated message pointed to by msg to the  user.  The  message
       might contain embedded NL characters and will not extend 256 characters including the terminating NUL.

       Usually  an  fputs(msg,  stdout);  followed  by fflush(stdout); will do, but for your convenience you can
       perform the same by passing JOY_CALIB_STDOUT for jo.  gl_printf(3) is well suited for this job  as  well.
       However, it needs some font setup first, so we do not provide a special preprocessor constant.

       It is valid to initialize an already initialized joystick. This allows you to recalibrate the joystick at
       any time. The module supports older version 0.* as well as newer version 1.* joystick device protocols.

GENERAL CONCEPT

       The joystick module is basically independent from the rest of svgalib. You can easily use it in text mode
       only  (but  why  would  you  do that?). If used in a graphics mode, however, it will release the joystick
       devices upon a VC switch s.t. several applications can share joysticks. Unfortunately this does not  work
       during  joystick  calibration.  Therefore, you should lock the VC with vga_lockvc(3) while calibrating in
       graphics mode.

       Also, when using joysticks in textmode only, svgalib won't detect VC switches  and  joysticks  cannot  be
       shared among applications.

       joystick_close(3) releases opened joysticks.

       joystick_update(3)  queries the joysticks for position changes. Note that you must busy wait for joystick
       events.  At least the older version 0.* joystick devices do not allow to sleep and get informed about new
       joystick events. Basically, this is a PC hardware issue in the first place.  Therefore,  vga_waitevent(3)
       does  not know about joysticks. To use it, you must make it timeout after a few ms and actively query the
       joystick for updates.

       By default a handler deals with the joystick events.  joystick_getaxis(3) and joystick_getbutton(3)  plus
       several    convenience   macros   joystick_button1|2|3|4,   joystick_getb1|2|3|4,   joystick_x|y|z,   and
       joystick_getx|y|z allow to query the current status of the joystick (as it was determined during the last
       joystick_update() call).

       The functions joystick_getnumaxes(3) and joystick_getnumbuttons(3) query the number of axes  and  buttons
       of a joystick.

       Finally,  you  can  (un)register  an  own handler for the joystick events with joystick_sethandler(3) and
       joystick_setdefaulthandler(3)

       The simple text demo joytest(6) and the more complex graphical mjoytest(6)  demo  show  the  use  of  the
       joystick package in some more detail.

CAVEATS

       This  function  is  only  available  in ELF versions of svgalib. Due to backwards compatibility issues it
       cannot be used with shared a.out libs.

       Certain game ports seem to be unable to detect missing joysticks properly.  (This might also be  a  linux
       device  driver  issue).  Anyway,  is  using  the  joystick interface, allow a user of your application to
       specify the number of joysticks to be used as well as to bail out the joystick calibration  (when  he  is
       not able to press a button on a missing joystick).

       Usually  <Ctrl>-C  works,  but  you  should  not rely too much on it, as it can be disabled. As a general
       guideline, maybe try to open and calibrate joysticks while still in textmode. <Ctrl>-C will usually still
       work then. If this succeeds, you may assume a joystick is  there  for  any  following  recalibrations  in
       graphics mode.

SEE ALSO

       svgalib(7),  vgagl(7),  libvga.config(5), joytest(6), mjoytest(6), joystick_close(3), joystick_update(3),
       joystick_sethandler(3), joystick_setdefaulthandler(3), joystick_getnumaxes(3), joystick_getnumbuttons(3),
       joystick_getaxis(3),  joystick_getbutton(3),   joystick_button1(3),   joystick_getb1(3),   joystick_x(3),
       joystick_getx(3).

AUTHOR

       The  svgalib  joystick  handler  was  mostly  done  by  Daniel  Engstr\"om <daniel.engstrom@riksnett.no>.
       Multiple joystick, VC switching support and code to glue it into svgalib by Michael  Weller  <eowmob@exp-
       math.uni-essen.de>. Part of the code is based on code from C. Smith and Vojtech Pavlik.

Svgalib 1.3.0                                     14 April 1998                                 joystick_init(3)