glenda.party
term% ls -F
term% cat index.txt
KEYBOARD(2)                   System Calls Manual                  KEYBOARD(2)



NAME
       initkeyboard, ctlkeyboard, closekeyboard - keyboard control

SYNOPSIS
       #include <u.h>
       #include <libc.h>
       #include <thread.h>
       #include <keyboard.h>

       Keyboardctl    *initkeyboard(char *file)

       int            ctlkeyboard(Keyboardctl *kc, char *msg)

       void           closekeyboard(Keyboard *kc)

DESCRIPTION
       These  functions access and control a keyboard interface for character-
       at-a-time I/O in a multi-threaded environment, usually  in  combination
       with  mouse(2).   They use the message-passing Channel interface in the
       threads library (see thread(2));  programs  that  wish  a  more  event-
       driven, single-threaded approach should use event(2).

       Initkeyboard opens a connection to the keyboard and returns a Keyboard‐
       ctl structure:

              typedef struct Keyboardct Keyboardctl;
              struct Keyboardctl
              {
                    Channel *c;       /* chan(Rune[20]) */

                    char    *file;
                    int     consfd;   /* to cons file */
                    int     ctlfd;    /* to ctl file */
                    int     pid;      /* of slave proc */
              };

       The argument to initkeyboard is a file  naming  the  device  file  from
       which  characters  may  be  read, typically /dev/cons.  If file is nil,
       /dev/cons is assumed.

       Once the Keyboardctl is set up a message containing a Rune will be sent
       on the Channel Keyboardctl.c to report each character read from the de‐
       vice.

       Ctlkeyboard is used to set the state of  the  interface,  typically  to
       turn  raw  mode  on and off (see cons(3)).  It writes the string msg to
       the control file associated with the device, which is assumed to be the
       regular device file name with the string ctl appended.

       Closekeyboard closes the file descriptors associated with the keyboard,
       kills the slave processes, and frees the Keyboardctl structure.

SOURCE
       /sys/src/libdraw

SEE ALSO
       graphics(2), draw(2), event(2), thread(2).

BUGS
       Because the interface delivers complete runes, there is no way  to  re‐
       port lesser actions such as shift keys or even individual bytes.



                                                                   KEYBOARD(2)